我知道LINQ不支持标准“join”中的两个diff上下文。
话虽如此,我想要做的是,从“用户”和“联系”环境中汇集一份“员工”清单。 (这些是来自旧项目的edmx,我不会惹恼。)
事情是,'用户'是我想要的WHO,但他们的人口统计信息位于“联系人”内。这是目前的两个LINQ:
var users = _pets_dc.Users
.Select(p => p)
.Where(x => x.Active)
.ToList();
var contacts = _poems_dc.Contacts
.Select(p => p)
.Where(x => x.Active)
.ToList();
我需要联系人,其中'user.Contact_GUID'等于'contacts.Contact_GUID'。
我试过了:
var query = contacts
.Where(x => x.Contact_GUID == users
.Select(y => y.Contact_GUID)
.FirstOrDefault());
无济于事......这只会带回一个联系人,但如果没有.FirstOrDefault()
则无效。有什么想法吗?
答案 0 :(得分:2)
如果您在两个表中使用Contact_GUID,如果您在用户表中有FK,请尝试使用include
的第一个查询
var users = _pets_dc.Users.Include("Contacts")
.Where(x => x.Active)
.ToList();
无论如何你可以尝试以下方法:
var joined = from list1 in users
join list2 in contacts
on list1.Contact_GUID equals list2.Contact_GUID
select new { list1, list2 };
答案 1 :(得分:1)
您可以使用以下代码:
var result = users.Select(e => contacts.Where(x => x.Contact_GUID == e.Contact_GUID));
答案 2 :(得分:1)
加入是可以在此处使用的选项之一,但您可以按如下方式修改当前解决方案:
var query = contacts
.Where(x => users
.Select(y => y.Contact_GUID).Contains(x.Contact_GUID)
).FirstOrDefault());
Contains
将检查给定列表中的Guid
,在原始解决方案中,您正在将Guid与List<Guid>
进行比较,这将失败
答案 3 :(得分:0)
选项1:
var query = from person in users
join contact in contacts on person.Contact_GUID equals contact.GUID into employees
from employee in employees.DefaultIfEmpty()
select new Employee() { User = person, Demographic = employee.Demographic };
var employees = query.ToList();
选项2:
var query = from person in users
join contact in contacts on person.Contact_GUID equals contact.GUID into employees
from employee in employees.DefaultIfEmpty()
select new { person.FirstName, person.LastName, employee.Demographic };
var employees = query.ToList();