我想用我的记录列表连接用户列表,但是记录列表有两列,我应该使用用户列表的值,这两列中的一列也是可以为空的。如何正确加入?我试图做这样的事情:linq加入两个id与单个列表的SQL语句
var results = (from r in records
join u in users on r.RegisteredBy equals u.Id
join u in users on r.ModifiedBy equals u.Id
select new CustomResult()
{
Id = r.Id,
Name = r.Name,
RegisteredByName = u.Name,
ModifiedByName = u.Name
}).ToList();
如我所料它没有工作,我记得我必须将其设置为空,如果使用默认值。
比如我有用户
var user1 = new User() { Id = 1, Name = "John" };
var user2 = new User() { Id = 2, Name = "Matt" }
var user3 = new User() { Id = 3, Name = "George" };
List<User> users = new List<User>(){ user1, user2, user3 };
的列表,我有我的记录另一个列表,即
var record1 = new Record() { Id = 1, Name = "Record1", RegisteredBy = 1, ModifiedBy = 3};
var record2 = new Record() { Id = 2, Name = "Record2", RegisteredBy = 3, ModifiedBy = null };
var record3 = new Record() { Id = 3, Name = "Record3", RegisteredBy = 2, ModifiedBy = 1 };
List<Record> records = new List<Record>(){ record1, record2, record3 };
由于这一结果加入我要让另一个类的列表,有我需要的信息,即
var result1 = new CustomResult(){ Id = 1, Name = "Record1", RegisteredByName = "John", ModifiedByName = "George" };
var result2 = new CustomResult(){ Id = 2, Name = "Record2", RegisteredByName = "George", ModifiedByName = null };
var result3 = new CustomResult(){ Id = 1, Name = "Record3", RegisteredByName = "Matt", ModifiedByName = "John" };
在你的真实情况,是那些真正列表或数据库表?即'IQueryable's?如果是的话,你使用的是什么ORM框架? –
这只是我想要的例子,我使用EFD 6与DDD模式,所以我的数据库上下文是不同的,就像两个不同的数据库 – GrandaS
声音像你只需要一个外部联接?如果是这样,看到这个职位:http://stackoverflow.com/questions/3404975/left-outer-join-in-linq – sgeddes