繁体   English   中英

在SQL查询子句中到LINQ查询

[英]In clause of sql query to linq query

如果有人可以帮助我在Linq中编写以下查询,将不胜感激。

select totaldue
from Receivables
where studentid = 8128
  and reportedon = (select max(reportedon)
                    from Receivables
                    where studentid = 8128

这就像您要的一样。

var receivables = new List<Receivable>()
{
    new Receivable { ReportedOn = DateTime.Now.AddDays(-5), StudentId = 8128, TotalDue = 5.43 },
    new Receivable { ReportedOn = DateTime.Now.AddDays(-4), StudentId = 8128, TotalDue = 4.32 },
    new Receivable { ReportedOn = DateTime.Now.AddDays(-3), StudentId = 8128, TotalDue = 3.21 },
    new Receivable { ReportedOn = DateTime.Now.AddDays(-2), StudentId = 8128, TotalDue = 2.10 },
    new Receivable { ReportedOn = DateTime.Now.AddDays(-1), StudentId = 2818, TotalDue = 1.09 },
    new Receivable { ReportedOn = DateTime.Now, StudentId = 2818, TotalDue = .98 }
};



var totDue = receivables
    .Where(receivable => receivable.StudentId == 8128)
    .OrderByDescending(receivable => receivable.ReportedOn)
    .Select(receivable => receivable.TotalDue);

Console.WriteLine("{0}", totDue.First());

检查一下:

var max_rep = (from d in Receivables select d.reportedon).Max();
var qry_res =  from q in Receivables where q.studentid == 8128 && q.reportedon == max_rep 

可能会有帮助

您也可以这样实现

var res = receivables.Where(s => s.StudentId == 8128)
                     .OrderBy(s => s.TotalDue).FirstOrDefault();

要么

var res = receivables.OrderBy(s=> s.TotalDue)
                     .FirstOrDefault(s => s.StudentId == 8128);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM