如何在LINQ上使用OR连接where子句

本文关键字:OR 连接 where 子句 LINQ | 更新日期: 2023-09-27 18:03:53

我有这个代码:

foreach (Package pack in Packages)
{
    filteredResults = filteredResults.Where(o => o.ID == pack.ID);
}

唯一的问题是我过滤结果N次(所以N在哪里(。我想做的是用N表达式只过滤一次结果(只有where子句(。比如:

    Where o.ID == pack.ID OR o.ID == pack.ID OR o.ID == pack.ID OR o.ID == pack.ID...

使用LINQ可以做到这一点吗?

如何在LINQ上使用OR连接where子句

下面的代码应该可以工作,或者至少可以引导您朝着正确的方向前进。

-- Get all the package IDs you want to select on.
var packIDs = from pack in Packages
    select pack.ID;
-- Return all results where the ID is in the package ids above.
filteredResults = from result in filteredResults
    where packIDs.Contains(result.ID)
    select result;

以上假设您的和是一个逻辑错误,而您的意思是ors。

var packIds = Packages.Select(x=>x.ID).ToArray();
filteredResults = filteredResults.Where(o=> packIds.Contains(o.ID));

如果这是linq-to-sql,它将被翻译成:

WHERE ID IN (1,2,3,4)

这样的东西可能会对您有所帮助:

filteredResults = originalResults.Where(o => Packages.Any(p => p.ID == o.ID));

是否不想要Intersect((?即

var ids = filteredResults.Select( fr => fr.Id ).Intersect(Packages.Select( p => p.PackID ) )  ;

我认为您需要将表达式与LinqKit 一起使用

var v = from utente in db.Utente
        select utente;
Expression<Func<Utente, bool>> expr = c => c.Age == 26;
expr = expr.Or<Utente>(c => c.Name != "Matteo");
v = v.Where(expr.Expand());

结果是:

SELECT...... FROM......
WHERE (26 = [Extent1].[Age ]) OR ('Matteo' <> [Extent1].[Name])

我有同样的问题,我尝试这个解决方案