在 C# 中左连接同一个 DataContext LinQ 中的两个表
left join two tables in same DataContext LinQ in c#
我在同一个 DataContext 中有两个 table,如下所示。
Table PersonnelInfo
{
personnelId,
personnelName ,
description,
deathMonthYear,
updatedBy,
updatedAt
}
Table PersonnelInfoOther
{
personnelId,
personnelName ,
updatedBy,
updatedAt
}
我定义一个class如下:
public class PersonnelInfoAll
{
public short personnelId{get;set;}
public string personnelName { get; set; }
public string personnelNameOtherLan { get; set; }
public string description { get; set; }
public string deathMonthYear { get; set; }
public int updatedBy { get; set; }
public DateTime updatedAt { get; set; }
}
I need to left join first table with the second one and retrieve all the data as PersonnelInfoAll format:
public List<PersonnelInfoAllLan> GetPersonnelInfosAll()
{
var context = new BookDataClassesDataContext { ObjectTrackingEnabled = false };
var personnelInfo = from u in context.PersonnelInfos
join b in context.PersonnelInfoOtherLans
on u.personnelId equals b.personnelId
select new PersonnelInfoAllLan
{
personnelId = u.personnelId,
personnelName = u.personnelName,
personnelNameOtherLan = b.personnelName,
description = u.description,
deathMonthYear = u.deathMonthYear,
updatedBy = u.updatedBy,
updatedAt = u.updatedAt
};
return personnelInfo.ToList();
}
这只给出了与两者匹配的一行。但我需要第一个 table 的所有记录。有没有大佬帮忙啊
使用group join:
var personnelInfo = from p in context.PersonnelInfos
join l in context.PersonnelInfoOtherLans
on p.personnelId equals l.personnelId into g
from l in g.DefaultIfEmpty()
select new PersonnelInfoAllLan
{
personnelId = p.personnelId,
personnelName = p.personnelName,
personnelNameOtherLan = (l == null ? null : l.personnelName),
description = p.description,
deathMonthYear = p.deathMonthYear,
updatedBy = p.updatedBy,
updatedAt = p.updatedAt
};
如果某个人在 lans 中没有匹配项,那么 DefaultIfEmpty()
将从加入的组中 return null
。这就是为什么您需要检查 l
以获得 null
.
我在同一个 DataContext 中有两个 table,如下所示。
Table PersonnelInfo
{
personnelId,
personnelName ,
description,
deathMonthYear,
updatedBy,
updatedAt
}
Table PersonnelInfoOther
{
personnelId,
personnelName ,
updatedBy,
updatedAt
}
我定义一个class如下:
public class PersonnelInfoAll
{
public short personnelId{get;set;}
public string personnelName { get; set; }
public string personnelNameOtherLan { get; set; }
public string description { get; set; }
public string deathMonthYear { get; set; }
public int updatedBy { get; set; }
public DateTime updatedAt { get; set; }
}
I need to left join first table with the second one and retrieve all the data as PersonnelInfoAll format:
public List<PersonnelInfoAllLan> GetPersonnelInfosAll()
{
var context = new BookDataClassesDataContext { ObjectTrackingEnabled = false };
var personnelInfo = from u in context.PersonnelInfos
join b in context.PersonnelInfoOtherLans
on u.personnelId equals b.personnelId
select new PersonnelInfoAllLan
{
personnelId = u.personnelId,
personnelName = u.personnelName,
personnelNameOtherLan = b.personnelName,
description = u.description,
deathMonthYear = u.deathMonthYear,
updatedBy = u.updatedBy,
updatedAt = u.updatedAt
};
return personnelInfo.ToList();
}
这只给出了与两者匹配的一行。但我需要第一个 table 的所有记录。有没有大佬帮忙啊
使用group join:
var personnelInfo = from p in context.PersonnelInfos
join l in context.PersonnelInfoOtherLans
on p.personnelId equals l.personnelId into g
from l in g.DefaultIfEmpty()
select new PersonnelInfoAllLan
{
personnelId = p.personnelId,
personnelName = p.personnelName,
personnelNameOtherLan = (l == null ? null : l.personnelName),
description = p.description,
deathMonthYear = p.deathMonthYear,
updatedBy = p.updatedBy,
updatedAt = p.updatedAt
};
如果某个人在 lans 中没有匹配项,那么 DefaultIfEmpty()
将从加入的组中 return null
。这就是为什么您需要检查 l
以获得 null
.