c# - LINQ - 包含匿名类型

标签 c# sql linq

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

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;

我收到以下错误:

The type arguments for method 'System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable, TSource)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

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

最佳答案

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

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

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

关于c# - LINQ - 包含匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2465057/

相关文章:

php - 错误 CI_DB_mysqli_result 类的对象无法转换为 int

c# - Linq 查询按日期对项目进行计数和分组

c# - 创建新动态对象时的内联操作

c# - 从 C# 使用 google drive API

c# - 在 Entity Framework Core 中禁用延迟加载

mysql - SQL 更新查询错误

SQL 查询问题 : How to merge two lists

c# - 按 Linq 子集合中的最小值排序父集合

c# - 在 C# 中快速复制 GUI?

c# - 检测数据库条目的变化