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