【问题标题】:Linq-to-entities: Easy to find max value in SQL, but difficult in LINQ?Linq-to-entities:在 SQL 中很容易找到最大值,但在 LINQ 中很难?
【发布时间】:2010-07-21 13:10:13
【问题描述】:

我已经开始在 .NET 3.5 中使用 Linq-to-entities,并且遇到了一个我可以在 SQL 中轻松完成的场景,但是我在使用 linq 时遇到了很大的困难。 我在 SQL 数据库中有一个包含三个字段的表,出于本示例的目的,我将它们称为 foo、bar 和 foo_index,并像这样填充它们:

块引用

富 |酒吧 | foo_index

555 101 1

555 101 2

555 101 3

555 101 4

555 101 5

要获取最大 foo_index 处的 bar 是什么,其中 foo=555,SQL 是


SELECT bar, max(foo_index) as max_foo_index
FROM T
WHERE foo=555
GROUP BY bar

我已经在 C# 中编写了一些 linq-to-entities 代码,但我觉得那里有一个更优雅的解决方案,而且我错过了一些可以使以下内容变得更容易的概念。另外,除了 foreach 之外,还有其他方法可以从 var 中获取数据吗?


db_entity db = new db_entity();

var q =
     from table in db.T
     where table.FOO == 555
     select new { table.BAR, table.FOO_INDEX };

var q2 = 
     from t2 in q
     where t2.FOO_INDEX == table.Max(r => r.FOO_INDEX)
     select new { t2.BAR };

int result = 0;

foreach (var record in q2}
{
    result = record.BAR.Value;
}

任何帮助或指导将不胜感激,谢谢!

【问题讨论】:

    标签: c# .net-3.5 linq-to-entities


    【解决方案1】:

    我认为这应该可行:

    var query = from item in db.T
                where item.FOO == 555
                group item by item.BAR into g
                select new { Bar = g.Key, Max = g.Max(x => x.FOO_INDEX) };
    

    所以基本上你采用与 SQL 相同的方法:对数据进行分组,然后获取组的键和组内的最大 FOO_INDEX。

    【讨论】:

    • 感谢您的示例(它有效),这正是我所需要的。再次感谢!
    【解决方案2】:

    您可以像在 SQL 中一样在 LINQ to Entities 中对元素进行分组。语法类似于:

    var q = from t in db.T
            where t.FOO == 555
            group t by t.BAR into g
            select new { 
                           Bar = group.Key, 
                           Max = g.Max(b => b.FOO_INDEX) 
                       };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      相关资源
      最近更新 更多