我有一个表,让我们称之为“记录”。包含: ID(整数)| CustID(整数)| 时间(日期时间)| 数据(字符串)
我需要每个客户的最新(最近)记录:
SQL
select * from record as i group by i.custid having max(id);
LINQ版本1
dgvLatestDistinctRec.DataSource = from g in ee.Records
group g by g.CustID into grp
select grp.LastOrDefault();
这会抛出一个错误:
System.NotSupportedException由用户代码处理。消息 = LINQ to Entities不认识方法 'Faizan_Kazi_Utils.Record LastOrDefault [Record](System.Collections.Generic.IEnumerable'1 [Faizan_Kazi_Utils.Record])' 方法,且此方法无法被转换为存储表达式。源 = System.Data.Entity
LINQ 版本 2
var list = (from g in ee.Records
group g by g.CustID into grp
select grp).ToList();
Record[] list2 = (from grp in list
select grp.LastOrDefault()).ToArray();
dgvLatestDistinctRec.DataSource = list2;
这样做虽然可行,但效率低下,因为它会将数据库中的所有记录加载到内存中,然后仅提取每个组中最后一个(最近的成员)。
是否有任何LINQ解决方案可以接近所提到的SQL解决方案的效率和可读性?