【问题标题】:What's the syntax for this linq expression calling the in method这个 linq 表达式调用 in 方法的语法是什么
【发布时间】:2013-07-15 22:37:21
【问题描述】:

我必须查询一个存储库,其中列 a = {myvalue} 且列 b 在集合中具有任何值。

这是我所拥有的:

Application[] applicationCollection = GetAllApplications();
var result = repo.GetAll(r => r.Email == myEmail && r.Application.In(applicationCollection));

我不知道如何写“in”部分...

最好有如何做到这一点的链接,这样我就可以学习它,而不是仅仅得到答案:)。谢谢大家。

(我确定这是一个重复的问题,但我的 Google/搜索技能显然很差。)

【问题讨论】:

  • 你是说你知道什么时候applicationCollection 包含 r.Application

标签: c# linq lambda


【解决方案1】:

item in collection的SQL思想是用C#(包括LINQ)写成collection.Contains(item)。在您的示例中,这可能是:

var result = repo.GetAll(r => r.Email == myEmail &&
               applicationCollection.Contains(r.Application));

【讨论】:

  • 如果就这么简单,我觉得非常愚蠢。明天我回去工作的时候试试,谢谢。
【解决方案2】:
ApplicationCollection.Contains(r.Application)

【讨论】:

    【解决方案3】:

    使用.Contains(collection) 而不是inHere's a link since you wanted one.

    【讨论】:

      【解决方案4】:

      如果你想按照你展示的方式写,你可以写这个扩展方法:

      public static bool In<T>(this T item, IEnumerable<T> set)
      {
          return set.Contains(item);
      }
      

      然后像您在问题中所做的那样完全使用它:

      Application[] applicationCollection = GetAllApplications();
      var result = repo.GetAll(r =>
          r.Email == myEmail &&
          r.Application.In(applicationCollection));
      

      如果您只使用内存集,这将正常工作。但是,如果您正在执行类似 LINQ-to-SQL 之类的操作,那么这将不兼容。

      注意:我并不是要暗示这种扩展方法可能是一个好主意 - 我只是说可以这样写。

      【讨论】:

        猜你喜欢
        • 2021-10-05
        • 1970-01-01
        • 1970-01-01
        • 2012-03-22
        • 2010-10-14
        • 1970-01-01
        • 2022-11-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多