Entity Framework选取两列long类型数据并求所有列最大值
解决方法
你的需求是从查询结果的两个long类型列中找出全局最大值,原代码的问题在于Max方法的使用方式不对,以下是两种可行的修正方案:
方案一:扁平化所有地址后取最大值
适用于LINQ to Objects或支持SelectMany的ORM场景:
public long GetMaxAddressByStation(StationType station) { var addressPairs = from tbl1 in Table1 join tbl2 in Table2 on tbl1.Guid equals tbl2.Guid where tbl2.Station == station select new { tbl1.DataAddress, tbl1.CommandAddress }; // 将每一行的两个地址拆入同一个序列,再取最大值 long maxAddress = addressPairs .SelectMany(pair => new[] { pair.DataAddress, pair.CommandAddress }) .DefaultIfEmpty(0) // 无匹配结果时返回初始值0 .Max(); return maxAddress; }
方案二:先取每行最大值再取全局最大值
更适合Entity Framework等LINQ to Entities场景(能更好地转换为SQL):
public long GetMaxAddressByStation(StationType station) { long maxAddress = (from tbl1 in Table1 join tbl2 in Table2 on tbl1.Guid equals tbl2.Guid where tbl2.Station == station select Math.Max(tbl1.DataAddress, tbl1.CommandAddress)) .DefaultIfEmpty(0) .Max(); return maxAddress; }
错误说明
原代码中.Max(<condition>)的写法不成立,因为Max方法无法直接对匿名对象进行比较——要么需要传入选择器指定比较的数值字段,要么将所有需要比较的数值整理为单一序列后再调用Max。
内容的提问来源于stack exchange,提问作者Agnus
相关产品推荐
相关产品推荐

