【问题标题】:How to translate SQL to LINQ with individual field joins?如何使用单个字段连接将 SQL 转换为 LINQ?
【发布时间】:2018-12-24 23:21:52
【问题描述】:

我有一个 SQL 语句,我想在 .NET 网站项目中实现它。我不明白如何加入特定字段,因为当我从表中选择时,这些字段不可用。

我的 SQL

选择 *

FROM [vResidence] c

在 c.UID = j.UID 上加入 [vJobs] j

这是我尝试过的 LINQ,但我被困在“ON”部分:

结果 =(来自 vJobs 中的 j

在 vResidence 中加入 cr ??? )

当我尝试 'j.' 时,我得到的唯一选项是 'equals'。

【问题讨论】:

  • 你是如何从数据库中获取表格的?
  • 如果您正确映射了数据库表,那么您应该已经自动创建了类并且这些字段将可用 - 允许非常相似的连接 "j.UID==cr.UID" - 如果这些字段不可用,那么 vJobs 和 vResidence 实例是什么?
  • 我不知道 linq 使用 'equals' 而不是 == .... 感谢您的帮助
  • 一如既往:不要使用join,使用导航属性。

标签: c# sql asp.net linq linq-to-sql


【解决方案1】:

您可以以 this 身份关注。以 JOIN 使用 equals 关键字连接到表

var result = from r in vResidence
             join j vJobs on r.UID equals  j.UID
             select new {[yourcolnum]};

【讨论】:

    【解决方案2】:

    你可以试试这个

    var result = (from j in vJobs
                  join cr in vResidence
                  on j.UID equals cr.UID
                  select new {
                    ...
                  }).ToList();
    

    【讨论】:

      【解决方案3】:

      Linq 表达式如下:

      from t1 in Table1
      join t2 in Table2
       on t1.ID equals t2.ID
      

      连接子句on 必须按顺序执行:首先是第一个表,然后是第二个。
      必须使用关键字equals

      【讨论】:

      • 这不是Lambda表达式,又是Linq
      【解决方案4】:

      除了上面的Linq 答案之外,我们可以使用Enumerable.Join 扩展名和Lambda 表达式来做JOIN。尝试类似,

              var result = vJobs.Join(vResidence, jb => new { jb.UID }, res => new { res.UID },
                           (jb, res) => new { jb, res })
                           .Select(x => x.jb) //Select the required properties (from both objects) with anonymous object or select left/right object
                           .ToList();
      

      C# Fiddle 带有样本数据。

      【讨论】:

        猜你喜欢
        • 2017-08-16
        • 2021-07-11
        • 2012-03-25
        • 1970-01-01
        • 2016-06-17
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 2021-06-01
        相关资源
        最近更新 更多