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查询,其中包含一个子查询,但它是在一个查询中执行的。