Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ或在LINQ上连接where子句?_C#_Linq_Expression - Fatal编程技术网

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])