c# - LINQ:根据另一个列表中元素上方的数学条件过滤列表

标签 c# linq

我有一个实体列表,其中一个字段 (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/

相关文章:

c# - Asp.Net/C# Å 何时等于 A? (且 É 等于 E)

c# - 如何在 Linq 和 EF 中订购嵌套集合

c# - 是否有用于获取字符串列表中最长字符串的 LINQ 函数?

c# - Java 的 BitSet 在 C# 中的等价物是什么?

c# - 无法使用 LOCK C# 锁定值类型

c# - 无法从后台运行的进程中读取 STDOut

c# - 简单的 SELECT WHERE LINQ 查询列表

c# - 使用 linq 和 Entity Framework 创建适当的模型

c# - 将 IEnumerable 转换为 IList 返回 null

c# - 使用来自另一个列表的参数对一个列表进行排序,并使用可连接的参数