我有一个实体列表,其中一个字段 (UtcOffset
) 是一个数字。
我有一个过滤器列表 offsets
,它是一个数字列表。
我想使用 LINQ 从第一个列表中选择 UtcOffset
字段等于或小于具有固定 delta
的过滤器列表中的值的所有实体> 添加了 (3600)。
我有一个代码只适用于“相等大小写”
public class TimeZone
{
public int Id { get; set; }
public string Name { get; set; }
public int UtcOffset { get; set; }
}
var delta = 3600;
List<TimeZone> TimeZones = new List<TimeZone>()
{
new TimeZone() {Id = 1, Name = "America/Tortola", UtcOffset = -14400},
new TimeZone() {Id = 2, Name = "Asia/Kathmandu", UtcOffset = 20700},
new TimeZone() {Id = 3, Name = "Asia/Kolkata", UtcOffset = 19800},
new TimeZone() {Id = 4, Name = "Africa/Tunis", UtcOffset = 3600},
new TimeZone() {Id = 5, Name = "Africa/Windhoek", UtcOffset = 7200},
new TimeZone() {Id = 6, Name = "Europe/Simferopol", UtcOffset = 10800},
}
List<Int32> offsets = new List<Int32>()
{
3600, -10800, -14400
};
var matchedList = TimeZones.Where(t => offsets.Contains(t.UtcOffset)).ToList();
它返回 ID 为 1 和 4 的实体。
我想选择 ID 为 1、4、5 的实体(UtcOffset
小于或等于 3600 + delta
、-10800 + delta
, -14400 + delta
).
如何修改我的 LINQ 表达式以匹配这种情况?
最佳答案
如果您希望它更有效地工作,只需使用它(归功于@yawnobleix 发现这一点,尽管它确实需要 Max()
而不是 Min()
):
var matchedList = TimeZones.Where(t => t.UtcOffset <= (offsets.Max() + delta)).ToList();
关于c# - LINQ:根据另一个列表中元素上方的数学条件过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56539590/