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

C# Linq查询以在一个查询中获得按最大值筛选的列表,c#,linq,C#,Linq,你能帮我改进一下这个代码吗 var orderNo = "1234"; var maxValue = MyTable.Where(x => x.OrderNo == orderNo ) .OrderByDescending(x => x.Filename) .Select(x => x.Filename) .FirstOrDefault(); v

你能帮我改进一下这个代码吗

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();
是否有可能将这两个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();

您可以使用
GroupBy

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

试一试

为什么不只是:

MyTable.Where(x => x.OrderNo == "1234")
       .Max(x => x.Filename);
您将获得所有具有最大文件名的记录。

为什么不:

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


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

是否
var1
等于
“1234”
?您想查找什么?文件名为“largetst”的条目?@Griveoushead是的,很抱歉,我删除了var1,并用硬编码字符串对其进行了更改。@Panagiotis Kanavos我正在尝试查找最后一个文件名。我假设我的文件名可以按名称排序。
var1
是否等于
“1234”
?您想查找什么?文件名为“largetst”的条目?@Griveoushead是的,很抱歉,我删除了var1,并用硬编码字符串对其进行了更改。@Panagiotis Kanavos我正在尝试查找最后一个文件名。我假设我的文件名可以按名称排序。为什么
GroupBy
OrderByDescending
First
是否足以选择文件名为“max”的条目?@PanagiotisKanavos:他不想要一条记录,而是想要所有具有此订单号和“max”文件名的不同行。@PanagiotisKanavos OP想要一个具有匹配文件名的列表。右。我在寻找最大值而不是最后一个,因为我可以得到匹配文件名的列表。@B413似乎最适合您的需要,不是吗?为什么
GroupBy
OrderByDescending
First
是否足以选择文件名为“max”的条目?@PanagiotisKanavos:他不想要一条记录,而是想要所有具有此订单号和“max”文件名的不同行。@PanagiotisKanavos OP想要一个具有匹配文件名的列表。右。我在寻找最大值,而不是最后一个,因为我可以得到匹配文件名的列表。@B413似乎最适合您的需要,不是吗?我喜欢,但这一个将生成两个查询,对吗?生成是什么意思?如果你指的是正在生成的SQL查询,那么不是-这只是一个SQL查询。我应该用execute这个词来代替generateNo它只是一个SQL查询,你传递给你的数据库,其中包含一个子查询,但它是执行一个查询。我喜欢它,但这个会生成两个查询,对吧?你说的生成是什么意思?如果你指的是正在生成的SQL查询,那么不是-这只是一个SQL查询。我应该用execute这个词来代替generateNo。这只是一个传递到数据库的SQL查询,其中包含一个子查询,但它是在一个查询中执行的。