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

时间:2011-07-28 10:01:00

标签: c# linq expression

我有这段代码:

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执行此操作?

5 个答案:

答案 0 :(得分:3)

以下代码之类的东西应该起作用,或者至少引导你朝着正确的方向前进。

-- 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;

以上假设你和你的错误是你的意思。

答案 1 :(得分:3)

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

如果这是linq到sql,这将被翻译成:

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

答案 2 :(得分:2)

这样的事可能会对你有所帮助:

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

答案 3 :(得分:1)

你不想要Intersect()吗?即

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

答案 4 :(得分:1)

我认为您需要在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])

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