如何在 LINQ sql 中将两个表与一个具有不同值的表连接起来?

Posted

技术标签:

【中文标题】如何在 LINQ sql 中将两个表与一个具有不同值的表连接起来?【英文标题】:How to join two tables with one table having distinct value in LINQ sql? 【发布时间】:2018-02-09 16:47:44 【问题描述】:

我有两个表emp_details,其中我有emp_idemp_nameemp_addresss 作为列,另一个表emp_hierarcy 我有emp_idemp_mgid,其中多行具有相同的emp_id .

我想编写一个 linq 查询,即在 emp_id 上加入两个表,在 emp_hierarcy 中具有不同的 emp_id。我知道如何在 sqlserver 中加入表,并且我已经在 sqlserver 中返回了这个查询

SELECT
    DISTINCT
    eh.emp_id
FROM
    emp_details ed
    LEFT OUTER JOIN emp_hierarcy eh ON ed.emp_id = eh.emp_id

我只能打印emp_id 如何获取 LINQ 查询中的所有详细信息?

【问题讨论】:

看看这个:***.com/questions/2767709/…。要获得不同的值,enumerable 应该有一个 Distinct 方法。 你在使用实体框架吗?如果使用导航属性,通常不需要在 Linq-to-Entities 中执行 JOIN。 查看 GROUP BY 以及如何在 Linq 中进行操作。 @Dai 实际上怎么可能你能用一个我对 MVC 不熟悉的例子来解释我 【参考方案1】:
(from a in emp_details
               join b in emp_hierarcy on a.emp_id equals b.emp_id
               select new 
               
               emp_id = a.emp_id
               ).Distinct();

你也可以试试,

(from a in emp_details
               join b in emp_hierarcy on a.emp_id equals b.emp_id
               select new 
               
               emp_id = a.emp_id
               ).DistinctBy(c => c.emp_id)

【讨论】:

这个我试过了,但是我如何获取所有详细信息,即 emp_name ,emp_address 等,因为它只打印 emp_id 正确的事情是我需要打印所有详细信息。 在select里面添加你想要的所有字段 能否分享您的数据,以便我在此基础上编写查询【参考方案2】:

选择您感兴趣的所有字段:

var items = (from a in emp_details
           join b in emp_hierarcy on a.emp_id equals b.emp_id
           select new 
           
               emp_id = a.emp_id,
               emp_name = a.emp_name,
               emp_address = a.emp_address,
               emp_mgid = b.emp_mgid
           ).Distinct();

foreach(var item in items)

    Console.WriteLine(item.emp_address);
    ...

【讨论】:

以上是关于如何在 LINQ sql 中将两个表与一个具有不同值的表连接起来?的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中将值设置为linq?

如何在jquery中将两个具有不同键的不同数组组合成一个数组

如何关联不同 dbml 图上的 Linq-To-Sql 对象?

在 T-SQL 中将变量表与单个变量结合起来

用于在不同表上具有多个 LEFT OUTER JOINS 的 SQL 的 LINQ

在 Spark SQL 中将多个小表与大表连接的最佳方法