C# 如何使用LINQ或在LINQ上连接where子句?
我有以下代码:C# 如何使用LINQ或在LINQ上连接where子句?,c#,linq,expression,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 ==
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可以做到这一点吗?下面的代码应该可以工作,或者至少可以引导您朝着正确的方向前进
-- 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;
以上假设您的and是一个逻辑错误,您指的是ors。类似的内容可能会帮助您:
filteredResults = originalResults.Where(o => Packages.Any(p => p.ID == o.ID));
如果这是linq to sql,则将转换为:
WHERE ID IN (1,2,3,4)
您不想要Intersect()?i、 e
我认为你需要在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());
var v=来自数据库中的Utene.Utene
选择尤特;
表达式expr=c=>c.Age==26;
expr=expr.Or(c=>c.Name!=“Matteo”);
v=v.Where(expr.Expand());
结果是:
SELECT...... FROM......
WHERE (26 = [Extent1].[Age ]) OR ('Matteo' <> [Extent1].[Name])
选择。。。。。。从…起
其中(26=[Extent1].[Age])或('Matteo'[Extent1].[Name])
我也有同样的问题,我尝试了这个解决方案什么类型的
filteredResults
<代码>IQueryable或inumerable
?您使用的是哪种linq实现?Linq To Objects…你能澄清一下你想要什么吗?有些东西不能等于1和2(假设每个pack.ID都是不同的。许多实现已经优化了多个Where
子句,所以使用和并不一定比使用多个Where
子句快多少。我错了,对不起!是的,我的意思是或者…我使用了IEnumerableThank you!这实际上是有效的!我只是想知道是否有可以将其中与或连接:)
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])