如何在 linq 中使用 Contains in where 子句

问题描述 投票:0回答:2

我有这个:

        var myResult = uow.GetRepository<SLItemsCustomersCard, long>()
            .Query(x => x.CustomerId == customerId && x.SquareColor == squareColor)
            .OrderBy(x => x.BranchMapRang)
            .Select((r, i) => new { Row = r, Index = i })
            .Where(x => x.Index == visitCounter - 1).ToList();

但我想在 where 子句中实现这一点:

.Where(x => x.Index.Contains(visitCounter)).ToList();

如何做到这一点?

c# entity-framework linq
2个回答
4
投票

您似乎误解了

Contains
方法的作用。我的答案基于您之前的用法:

Where(x => x.Index == visitCounter - 1)

换句话说,

visitCounter
是一个整数(
Index
也是整数)。但你想像这样使用它:

Where(x => x.Index.Contains(visitCounter))

这没有语法意义。整数 (

Index
) 没有
Contains
函数。我并不完全清楚你想要实现什么,但你的评论更清楚地说明了这一点:

但我想在 SQL Server 中实现类似 IN 子句的功能。

SQL 中的

IN

 子句需要一系列可能性(在您的情况下是整数列表),并且您在这里不使用整数列表。此外,您将其表述为 
Index.Contains(visitCounter)
,这意味着您期望 
Index
 是整数列表?

这根本没有道理。因此,假设您的伪代码不准确,我会给您最有意义的答案:

List<int> visitorIds = new List<int>() { 1, 5, 99, 125 };

然后您可以执行以下操作:

.Where(x => visitorIds.Contains(x.Index))

用文字来说,这段代码基本上告诉计算机“只给出

Index

 列表中提到的 
visitorIds
 的项目”。


2
投票
您可以使用

Contains

,如下所示:

int[] VisitorIds = new int[] {1,2,3}; //an array to check with .Where(x => VisitorIds.Contains(x.Index)).ToList();
    
© www.soinside.com 2019 - 2024. All rights reserved.