LINQ:连接两个独立上下文的结果
本文关键字:独立 两个 上下文 结果 连接 LINQ | 更新日期: 2023-09-27 18:02:13
我知道LINQ在一个标准的'join'中不支持两个不同的上下文。
说了这么多,我想做的是,从"用户"answers"联系人"上下文中拉出一个"雇员"的列表。(这些是来自旧项目的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();
我需要联系人 where 'user。Contact_GUID' = 'contacts.Contact_GUID'.
I have try:
var query = contacts
.Where(x => x.Contact_GUID == users
.Select(y => y.Contact_GUID)
.FirstOrDefault());
to no avail…这只能带回一个触点,但没有.FirstOrDefault()
将无法工作。什么好主意吗?
如果您在两个表中都使用Contact_GUID,如果您在users表中有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 };
ref: https://stackoverflow.com/a/2724018/1166597
可以使用下面的代码:
var result = users.Select(e => contacts.Where(x => x.Contact_GUID == e.Contact_GUID));
join是这里可以使用的选项之一,但是您可以这样修改当前的解决方案:
var query = contacts
.Where(x => users
.Select(y => y.Contact_GUID).Contains(x.Contact_GUID)
).FirstOrDefault());
Contains
将检查给定列表中的Guid
,在原始解决方案中,您将Guid与List<Guid>
进行比较,这将失败
选项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();