【问题标题】:LINQ To SQL Join with IEnumerable<Non-Premitive Type>使用 IEnumerable<Non-Primitive Type> 的 LINQ To SQL 连接
【发布时间】:2019-07-22 20:17:12
【问题描述】:

我有一个物品清单说:

public class Data
{
    public Id int;
    public Name string;
}

IEnumerable<Data> data = new List<Data>() { new Data(){Id = 1, Name = "1"}, new Data(){Id = 2, Name = "2"}};

现在我想使用 linq 从 SQL db 中获取数据

var result = (from a in dbContext.Table1
             join b in dbContext.Table2 on Table1.Key equals Table2.Key
             join d in data on new { a.Id, b.Name } equals new { d.Id, d.Name}
             select a).ToList();

以上方法不起作用,只有 Premetive Types 或 IEnumerable 是允许的。

我怎样才能做到这一点?

【问题讨论】:

  • 请记住,这种方法必须向客户端查询所有数据,然后使用 IEnumerable 连接;最好将过滤器提供给 dbContext 以在 SQL 服务器端运行过滤。
  • 请标记正确的数据库。这不是 LINQ-to-SQL。
  • @GertArnold 完成。它将是哪个 LINQ 库?
  • @Michael 这就是这里的问题我有一个我想要过滤的值对列表。我也希望它发生在 SQL 端。

标签: c# linq join linq-to-entities


【解决方案1】:

尝试通过 id 和 name 分别检查相等性:

a.Id == b.Id && a.Name == b.Name

【讨论】:

    【解决方案2】:

    尝试关注

    var result = (from a in dbContext.Table1
                 join b in dbContext.Table2 on Table1.Key equals Table2.Key
                 join d in data on a.Id equals d.Id
                 where b.Name == d.Name
                 select a).ToList();
    

    【讨论】:

    • 问题出在join d in data。 data 没有 SQL 翻译。
    • 数据库中的Id是字符串还是数字?您的 c# 代码使用的是整数。
    • @jdweng 如果我的数据中的列数增加了怎么办?
    • 输出是代码“select a”中的整个表“a”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多