我有这段代码:
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执行此操作?
答案 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])
我有同样的问题,我试试这个解决方案