You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:44:55