c# - Linq to Sql 联合语句

标签 c# linq

我有两个要合并的结果集(LINQ to SQL/Entity)

var ldrSet = (from ldr in Leader
              join emp in employee
              on ldr.ID equals emp.ID
              where ldr.ID.Contains("123")
     select new {ID = ldr.ID, Name = emp.firstName + " " + emp.lastName, flag = "Edit"});

var allEmpSet = (from emp in employee
                 where emp.ID.Contains("123")
     select new {ID = ldr.ID, Name = emp.firstName + " " + emp.lastName, flag = "New"});

var results = ldrSet.Union(allEmpSet);

当我运行这个查询时,我得到这样的结果:

123 Joe Blow Edit

123 Joe Blow New

234 Jane Smith New

345 John Doe New

我明白为什么会发生这种情况,但有没有办法仅通过使用 ID 进一步过滤此结果集?

我想返回一条记录,Edit 记录胜过 New 记录。所以我只想要这个:

123 Joe Blow Edit

234 Jane Smith New

345 John Doe New

最佳答案

在这种情况下处理事情的正确方法不是联合。它是使用左外连接而不是 LINQ 默认的内连接。这将允许您一次选择所有行,并在数据匹配适当时设置 flag:

var results = from e in employee
              join l in leaders on l.ID equals e.ID into ls
              from l in ls.DefaultIfEmpty()
              select new { 
                  e.ID, 
                  Name = e.firstName + e.lastName,
                  flag = (p == null ? "New" : "Edit")
              };

关于c# - Linq to Sql 联合语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21765138/

相关文章:

c# - 带有三元运算符的 IEnumerable Select 语句

c# - 为什么在ToLookup之前多放一个ToArray会更快?

c# - 将 C# 项目设置为始终在 Release模式下编译,反之亦然

c# - SandCaSTLe HTML 输出多个命名空间

c# - 为什么 Selenium Firefox 驱动程序认为当父级溢出 :hidden? 时我的模态不显示

c# - 在 C# 中,是否有一种 SortedList<double> 允许快速查询(使用 LINQ)最近的值?

asp.net-mvc - 如何根据用户在 ASP.NET MVC 中的选择对列表进行排序?

c# - 将 json 文件保存到文本文件中

c# - 在 ASP.NET MVC 3 中初始化一个空白的 dbSet

c# - 如何使用 linq 映射两个列表