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

Linq“join"或“;GroupJoin"不能编译?无法解析符号'GroupJoin&#

这是因为您提供了类型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;
    }