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

时间:2017-08-29 12:30:56

标签: c# entity-framework linq

我有这个:

        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.Cotains(visitCounter)).ToList();

怎么做?

2 个答案:

答案 0 :(得分:3)

您似乎误解了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的项目。”

答案 1 :(得分:0)

您可以像这样使用Contains

int[] VisitorIds = new int[] {1,2,3}; //an array to check with

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