c# - 多对多表上的 LEFT LINQ TO SQL C# JOIN

标签 c# linq linq-to-sql many-to-many

您好,我是 linq to sql 的新手,我了解基础知识。问题是我想在查询中进行左连接。查询中有 3 个表。

  1. Claimants ( all rows should be returned from this table)
  2. Claim
  3. User

查询应该返回所有拥有 claim 人的用户。这是通过多对多表声明完成的。但是,无论用户如何,都应退还所有 claim 人。因此,左边加入了 Claimants。

我有以下查询

    var d = (from Claimants in DB.Claimants
                 join Claims in DB.Claims on Claimants.Claiment_ID equals Claims.Claiment_ID
                 join Users in DB.Users on Claims.User_ID equals Users.User_ID
                 where (Claimants.TrialDate.Value >= dtDayStart & Claimants.TrialDate <= dtDayEnd)
                 select new
                 {
                     ClaimantFirstName = Claimants.FirstName,
                     ClaimantLasname = Claimants.LastName,
                     ClaimantsID = Claimants.IDNumber,
                     Claimants.OurReference,
                     Claimants.TrialDate,
                     InterviewStart = Claims.DateTimeStart,
                     InterviewEnd = Claims.DateTimeEnd,
                     Claims.Priority,
                     UserFirstname = Users.FirstName,
                     UserLastName = Users.LastName,
                     UserID = Users.IDNumber
                 });

我试过如下使用 into 语句,但没有成功

        var d = (from Claimants in DB.Claimants
                 join Claims in DB.Claims on Claimants.Claiment_ID equals Claims.Claiment_ID
                 into TheClaimants
                 from Claims in TheClaimants.DefaultIfEmpty()

                 join Users in DB.Users on Claims.User_ID equals Users.User_ID
                 where (Claimants.TrialDate.Value >= dtDayStart & Claimants.TrialDate <= dtDayEnd)
                 select new
                 {
                     ClaimantFirstName = Claimants.FirstName,
                     ClaimantLasname = Claimants.LastName,
                     ClaimantsID = Claimants.IDNumber,
                     Claimants.OurReference,
                     Claimants.TrialDate,
                     InterviewStart = Claims.DateTimeStart,
                     InterviewEnd = Claims.DateTimeEnd,
                     Claims.Priority,
                     UserFirstname = Users.FirstName,
                     UserLastName = Users.LastName,
                     UserID = Users.IDNumber
                 });

如果有人能为我指出正确的方向,让我知道如何正确地使用这些左右联接并解释其工作原理,我将不胜感激。非常感谢您。

最佳答案

var d = (from Claimants in DB.Claimants
  join Claims in DB.Claims on Claimants.Claiment_ID equals Claims.Claiment_ID)
  .DefaultIfEmpty()
  join Users in DB.Users on Claims.User_ID equals Users.User_ID
  where (Claimants.TrialDate.Value >= dtDayStart & Claimants.TrialDate <= dtDayEnd)
  .DefaultIfEmpty()
  select new
  {
    ClaimantFirstName = Claimants.FirstName,
    ClaimantLasname = Claimants.LastName,
    ClaimantsID = Claimants.IDNumber,
    Claimants.OurReference,
    Claimants.TrialDate,
    InterviewStart = Claims.DateTimeStart,
    InterviewEnd = Claims.DateTimeEnd,
    Claims.Priority,
    UserFirstname = Users.FirstName,
    UserLastName = Users.LastName,
    UserID = Users.IDNumber
 });

Left outter join

关于c# - 多对多表上的 LEFT LINQ TO SQL C# JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14788299/

相关文章:

asp.net - Linq to SQL,仅返回特定角色的用户

c# - 在 WPF 应用程序中使用服务定位器模式时的 View 模型范围

c# - 用图像填充 WPF 矩形

c# - EF1 SelectMany() 左连接

c# - 使用 lambda 表达式查找列表中的项目

c# - 无法使用 LINQPad 4 更新行

C# 异常行号始终为零 (0)

c# - .NET 域模型,何时急切加载

c# - 使用 Linq 进行通配符搜索

c# - 转换表以在 C# 中的 Linq 中添加更多列