Linq“join"或“;GroupJoin"不能编译?无法解析符号'GroupJoin
本文关键字:GroupJoin quot 符号 不能 join Linq 编译 | 更新日期: 2023-09-27 18:10:13
也许我的眼睛交叉了,因为我已经写了一整天的代码,但我决定使用linq表达式,它不编译关键字…注意,这在linqPad中有效。
using System.Linq;
public IQueryable<CompanyPerson> PersonsFlattened()
{
var contacts = from person in Person
join companyPerson in CompanyPerson on person.Id equals companyPerson.PersonId into companyPersonGroups
from companyPerson in companyPersonGroups.DefaultIfEmpty()
select new
{
ContactPerson = person,
ContactCompany = companyPerson.Company
};
}
由于某些原因,第2行的"join"给了我一个错误
"无法解析符号'GroupJoin'"
.
我甚至试过另一种方法。
var contacts2 = Person.GroupJoin(CompanyPerson,
person => person.Id,
companyPerson => companyPerson.PersonId,
(person, companyPersonGroups) =>
new
{
person = person,
companyPersonGroups = companyPersonGroups
}
).SelectMany(
temp0 => temp0.companyPersonGroups.DefaultIfEmpty(),
(temp0, companyPerson) =>
new
{
ContactPerson = temp0.person,
ContactCompany = companyPerson.Company
}
);
和我得到的是一样的,有什么想法吗?我是不是漏掉了一些表达的参考?我遍历了对象资源管理器,但没有看到任何我没有包含的东西。这是一个web api 2项目。net 4.5
这是因为您提供了类型CompanyPerson
而不是值作为第一个参数:
var contacts2 = Person.GroupJoin(companyPerson,
person => person.Id,
companyPerson => companyPerson.PersonId,
(person, companyPersonGroups) =>
new
{
person = person,
companyPersonGroups = companyPersonGroups
}
).SelectMany(
temp0 => temp0.companyPersonGroups.DefaultIfEmpty(),
(temp0, companyPerson) =>
new
{
ContactPerson = temp0.person,
ContactCompany = companyPerson.Company
}
);
解决了GroupJoin编译问题,由于某种原因它不能正确编译var contact = xxx
必须返回QueryAll(Person)
return _contextProvider.QueryAll<Person>().GroupJoin(...)...
这是最终的解决方案。执行左sql连接并获取人员,即使他们没有关联的公司。
[HttpGet]
public IQueryable<Person> PersonsFlattened()
{
//return _contextProvider.QueryAll<Person>();
var contacts = from person in _contextProvider.QueryAll<Person>()
join companyPerson in CompanyPersons() on person.Id equals companyPerson.PersonId into companyPersonGroups
from companyPerson in companyPersonGroups.DefaultIfEmpty()
select new Person()
{
FirstName = person.FirstName,
LastName = person.LastName
};
return contacts;
}