[英]c# Linq Join same table twice
使用下面的linq语句,我显示了一个结果列表,该列表连接了两个名为AssetTransferItems和Memberships的表。 成员资格表包含一个用户列表,其中每个用户均以GUID形式存储,并包含其用户名。
现在,我想添加另一个名为UserReceived的列,并像UserAdded一样显示用户名而不是GUID。 UserReceived = txboxItems.UserReceived当前显示GUID,我正在尝试获取用户名。
我不确定如何修改Linq语句以从成员资格表中获取UserReceived的用户名。 我添加了第二个联接:
join userReceived in Memberships on txboxItems.UserReceived equals userReceived.UserId
但这没有显示结果。
var query = (from txboxItems in AssetTransferItems
join user in Memberships on txboxItems.UserAdded equals user.UserId
join userReceived in Memberships on txboxItems.UserReceived equals userReceived.UserId
where txboxItems.TransferBoxID == BoxId && txboxItems.Deleted == false
orderby txboxItems.TicketID descending
select new
{
Description = txboxItems.Description.ToString(),
DateAdded = (DateTime?) txboxItems.DateAdded.Value,
UserAdded = user.Username,
DateReceived = (DateTime?) txboxItems.DateReceived.Value,
UserReceived = userReceived.Username,
});
编辑:我更新了linq语句以反映我现在所拥有的。 它显示userReceived.Username,但不显示UserReceived为null的所有其他结果。
谢谢
join user in Memberships on txboxItems.UserAdded equals user.UserId
join userReceived in Memberships on txboxItems.UserAdded equals userReceived.UserId
应该:
join user in Memberships on txboxItems.UserAdded equals user.UserId
join userReceived in Memberships on txboxItems.UserReceived equals userReceived.UserId
// ------------------------------------------------^^^^^^^^
然后,您应该可以使用
UserReceived = userReceived.Username
代替
UserReceived = txboxItems.UserReceived
// ------------^^^^^^^^^^^^^^^^^^^^^^^
编辑
从这个答案中 ,以下应该起作用(为了示例的可读性,我删除了where
和orderby
子句):
from txboxItems in AssetTransferItems
from user in Memberships
.Where(u => u.UserId == txboxItems.UserAdded).DefaultIfEmpty()
from userReceived in Memberships
.Where(u => u.UserId == txboxItems.UserReceived).DefaultIfEmpty()
select new
{
Description = txboxItems.Description.ToString(),
DateAdded = (DateTime?) txboxItems.DateAdded.Value,
UserAdded = user?.Username,
DateReceived = (DateTime?) txboxItems.DateReceived.Value,
UserReceived = userReceived?.Username
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.