【问题标题】:LINQ - Contains with anonymous typeLINQ - 包含匿名类型
【发布时间】:2010-03-17 18:59:51
【问题描述】:

使用此代码时(为询问而简化):

var rows1 = (from t1 in db.TABLE1
    where (t1.COLUMN_A == 1)
    select new { t1.COLUMN_B, t1.COLUMN_C });

var rows2 = (from t2 in db.TABLE2
    where (rows1.Contains(t2.COLUMN_A))
    select t2;

我收到以下错误:

方法的类型参数 'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable, TSource)' 不能从 用法。尝试指定类型 显式参数。

我需要按 COLUMN_B 过滤第一个结果,但我不知道如何。有办法过滤吗?

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:

    为了使用 Contains,您必须传递 IEnumerable<T> 中类型的实例。这对于匿名类型来说非常困难。

    相反,我将使用Any 扩展方法重载,它允许您指定比较 lambda。例如

    var rows2 = (from t2 in db.TABLE2
        where (rows1.Any(x => x.COLUMN_B == t2.COLUMN_A))
        select t2;
    

    【讨论】:

      【解决方案2】:

      尝试使用 Any

      var rows1 = (from t1 in db.TABLE1
          where (t1.COLUMN_A == 1)
          select new { t1.COLUMN_B, t1.COLUMN_C });
      
      var rows2 = (from t2 in db.TABLE2
          where (rows1.Any( r => r.COLUMN_B == t2.COLUMN_A))
          select t2;
      

      【讨论】:

        【解决方案3】:

        这行得通吗?

        var rows1 = (from t1 in db.TABLE1
            where (t1.COLUMN_A == 1)
            select new { t1.COLUMN_B, t1.COLUMN_C }).ToList();
        
        var rows2 = (from t2 in db.TABLE2
            where (rows1.Contains(t2.COLUMN_A))
            select t2;
        

        【讨论】:

          猜你喜欢
          • 2013-03-25
          • 2016-06-22
          • 1970-01-01
          • 1970-01-01
          • 2019-06-25
          • 1970-01-01
          • 2011-11-07
          • 2012-04-05
          • 1970-01-01
          相关资源
          最近更新 更多