C# 使用ID列表或数组的Linq查询

C# 使用ID列表或数组的Linq查询,c#,linq,entity-framework,C#,Linq,Entity Framework,我很难弄清楚如何在c中使用linq查询数据库,以获取与ID列表或数组对应的所有对象,并将它们放入列表中。例如: 我有一张物品表。我想构建一个方法来检索ID位于passs数组或列表中的所有项。我在谷歌上搜索过它,但它总是假设我只想查询列表或数组,而不是使用列表或数组进行查询 提前谢谢。听起来你想要的是: var query = items.Where(item => validIds.Contains(item.Id)); 注意,如果这都是本地的,即进程内的,LINQ到对象,并且您可能有很

我很难弄清楚如何在c中使用linq查询数据库,以获取与ID列表或数组对应的所有对象,并将它们放入列表中。例如:

我有一张物品表。我想构建一个方法来检索ID位于passs数组或列表中的所有项。我在谷歌上搜索过它,但它总是假设我只想查询列表或数组,而不是使用列表或数组进行查询


提前谢谢。

听起来你想要的是:

var query = items.Where(item => validIds.Contains(item.Id));
注意,如果这都是本地的,即进程内的,LINQ到对象,并且您可能有很多有效的ID,那么您可能需要构造一个哈希集

当然,您也可以加入:

var query = from id in validIds
            join item in items on id equals item.Id
            select item;
在网络上,甚至在堆栈溢出上,都有很多这样的例子,但我可以理解,这不是一个容易找到的例子,因为您使用的所有术语都很常见。

像这样使用

 var subscriptionDetails = SubscriptionMasterBL.GetSubscriptionMasterDetails();
                tempUserList = lstSubscriberUsers.Where(a => subscriptionDetails.Any(b => b.SubscriptionUserId == a.Id 
                    && b.TokenId != Guid.Empty)).ToList();

看来这能满足我的需要。我试试看。谢谢不幸的是,当您分配了ID时,这就成了问题。如果传入请求的参数太多,则在该行中会出现错误。服务器最多支持2100个参数,因为contains不使用SELECT*FROM表生成查询,其中ID在x,y……z中,而是注入参数的分配。@ppumkin:事实上,这最终会成为一个问题-老实说,我不知道EF支持的处理这种情况的方法是什么。我想在这种情况下,我只需要手动构建和执行查询。由于ID是从另一个查询生成的,因此它受到SQL注入的保护。。我希望如此。但是我也看不到其他的方法。。除非我使用dapper。@ppumkin:根据您的操作,您可能会将查询拆分为多个查询,每个查询都使用答案中的方法和ID子集。这似乎不适用于本地ID集合。。。出于某种原因。尽管我在某个地方读到过,但我们应该使用Any,因为它比Contains快得多。。但是没有意识到可以将其应用于SQL查询。。除Contains运算符外,任何获取错误局部序列的方法都不能用于查询运算符的LINQ到SQL实现中。