Linq查询,在一个查询中获得按最大值筛选的列表



你能帮我改进这段代码吗?

var orderNo = "1234";
var maxValue = MyTable.Where(x => x.OrderNo == orderNo )
                      .OrderByDescending(x => x.Filename)
                      .Select(x => x.Filename)
                      .FirstOrDefault();
var list = (from x in MyTable
            where x.OrderNo == orderNo && x.Filename == maxValue
            select x).Distinct();
list.Dump();

是否可以将这2个Linq查询改进为1,并避免查询2倍于我的数据库。类似于:

var list = (from x in MyTable
    where x.OrderNo == orderNo && MaxValue(x.Filename)
    select x)
    .Distinct();

您可以使用GroupBy:

var list = MyTable
    .Where(x => x.OrderNo == "1234") // or var1
    .GroupBy(x => x.Filename)
    .OrderByDescending(g => g.Key)
    .First()
    .Distinct();

尝试

var list = (
    from x in MyTable
    where x.OrderNo == var1 && 
        x.Filename == MyTable.Where(x => (x.OrderNo == "1234")).Max(p => p.Filename)
    select x
).Distinct();

为什么不只是:

MyTable.Where(x => x.OrderNo == "1234")
       .Max(x => x.Filename);

您将获得具有最大文件名的所有记录。

最新更新