实体框架选择长数据类型的多列并找到所有列的最大值

问题描述 投票:0回答:1

我需要选择表中长数据类型的两列,并从结果中找到两列中最大的数字。我尝试过但没有成功的是以下内容(由于代码不完整,因此有错误):

public long GetMaxAddressByStation(StationType station)
{
    long maxAddress = 0;

    var addressList = (from tbl1 in Table1
                       join tbl2 in Table2 on tbl1.Guid equals tbl2.Guid
                       where tbl2.Station == station
                       select new
                              {
                                  tbl1.DataAddress, 
                                  tbl1.CommandAddress
                              }).Max(<condition>);

    return maxAddress;
}
sqlite entity-framework-core
1个回答
0
投票

尝试使用

Max()
中的
IEnumerable
方法(或
IQueryable
,继承了前一个方法)时遇到的问题是,它应该用于从列表中获取最大元素,而不是来自列表元素中的多个值。

这意味着您将逐个比较您的地址组,而不是比较每组地址,以保留最大的地址。

为了解决这个问题,我会在某处创建一个方法(可能具有私有可见性,直接在类中,除非您看到将其保留在其他地方有任何用处),该方法将获取地址集的可枚举并返回 long 的可枚举:

// TheType here depends on your query. You could potentially make it more
// generic by letting your function accept <T>, and use that type instead of
// TheType I used in the signature below
private List<long> MaxAddress(IEnumerable<TheType> addressesSets) {
    List<long> maxAddresses = new List<long>();

    for (var set : addressesSets) {
        maxAddresses.Add(set.adr1 >= set.adr2? set.adr1: set.adr2); // Change the `>=` to simple `>` if you want to take the second value by default when both are identical.
    }

    return maxAdress;
}

收回你的代码,你可以这样称呼它:

public long GetMaxAddressByStation(StationType station)
{
    long maxAddress = 0;

    var addressList = MaxAdress(from tbl1 in Table1
                                join tbl2 in Table2 on tbl1.Guid equals tbl2.Guid
                                where tbl2.Station == station
                                select new
                                    {
                                        tbl1.DataAddress, 
                                        tbl1.CommandAddress
                                    });

    return maxAddress;
}
© www.soinside.com 2019 - 2024. All rights reserved.