使用 LINQ 连接多个表以返回列表

布赖恩·罗斯

我有一个 LINQ 声明,我想弄清楚 - 我对此比较陌生,所以请原谅我的无知。我想返回一个人列表,每个人都有一个兴趣列表。

person(p) 表通过 p.id = pi.personid 连接到 personinterest(pi) 表

personinterest 表连接到 interest(i) 表,pi.interestid 到 i.id。

    public class Persons
    {
        public int Id { get; set; }
        public string LastName { get; set; }
        public string FirstName { get; set; }
...
        public IList<Interest> PersonInterests { get; set; }
    }

    public class Interest
    {
        public string InterestName { get; set; }
    }

我要返回的类是一个人,每个人都有其 PersonInterests 列表,其中填充了 0 到多个兴趣。我下面的 Linq 语句正在返回数据,但每个人的记录只获得一种兴趣,并且有不止一种兴趣的人正在复制他们的个人数据,如下 linq 语句所示

            var interests = _db.Interests;

            return (from p in _db.People
                    join i in _db.PersonInterests on p.Id equals i.PersonId
                    join s in _db.Interests on i.InterestId equals s.Id
                    select new Persons{
                        Id = p.Id,
                        FirstName = p.FirstName,
                        LastName = p.LastName,
                        Age = p.Age,
                        Address = p.Address,
                        City = p.City,
                        StateAbbrev = p.StateAbbrev,
                        ZipCode = p.ZipCode,
                        PersonInterests = (from r in interests where r.Id == i.InterestId select r).ToList()
                    }).ToList();

结果:

{"id":1,"lastName":"Alexander","firstName":"Carson","age":23,"address":"123 4th Street","city":"Jamestown","stateAbbrev":"NV","zipCode":"65465","personInterests":[{"id":1,"interestName":"Basketball"}],"photo":null}
{"id":1,"lastName":"Alexander","firstName":"Carson","age":23,"address":"123 4th Street","city":"Jamestown","stateAbbrev":"NV","zipCode":"65465","personInterests":[{"id":2,"interestName":"Camping"}],"photo":null},

而不是这样,我希望数据看起来像这样:

{"id":1,"lastName":"Alexander","firstName":"Carson","age":23,"address":"123 4th Street","city":"Jamestown","stateAbbrev":"NV","zipCode":"65465","personInterests":[{"id":1,"interestName":"Basketball"}, {"id":2,"interestName":"Camping"}],"photo":null}

我已经为此苦苦挣扎了一段时间,非常感谢任何帮助。

布赖恩·罗斯

所以,在盯着这个看了几个小时之后,我意识到在一个查询中尝试这样做是愚蠢的。我把它分开并让它工作。首先检索人员数据,然后为每个人建立他们感兴趣的列表。

    public async Task<IEnumerable<PersonResource>> GetPeople()
    {
        IEnumerable<PersonResource> people = await (from p in _db.People
              select new PersonResource
              {
                Id = p.Id,
                FirstName = p.FirstName,
                LastName = p.LastName,
                Age = p.Age,
                Address = p.Address,
                City = p.City,
                StateAbbrev = p.StateAbbrev,
                ZipCode = p.ZipCode,
                Photo = p.Photo,
                Interests = new List<string>()
              }).ToListAsync();

        foreach (PersonResource person in people)
        {
            person.Interests = (from iint in _db.Interests
                          join n in _db.PersonInterests on iint.Id equals n.InterestId
                          where n.PersonId == person.Id
                          select iint.InterestName).ToList();
        }

        return people;



        // return Mapper.Map<List<Person>, List<PersonResource>>(people);


    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 LINQ 方法语法从多个表返回数据

来自分类Dev

使用Linq左连接多个IList <>

来自分类Dev

使用Linq连接类的属性列表

来自分类Dev

使用Linq通过DTO返回多个值

来自分类Dev

使用LINQ返回的对象

来自分类Dev

如何使用ViewModels从LINQ查询返回列表

来自分类Dev

使用Linq返回节点中的属性列表

来自分类Dev

使用LINQ从多个列表中选择

来自分类Dev

使用LINQ从多个列表中选择

来自分类Dev

使用LINQ查询列表

来自分类Dev

使用LINQ的单独列表

来自分类Dev

使用LINQ创建列表

来自分类Dev

使用Linq过滤列表

来自分类Dev

使用LINQ从多个表中全选

来自分类Dev

如何使用 LINQ 使用联合查询从多个表中选择以仅返回一列?

来自分类Dev

使用linq更新表

来自分类Dev

使用 LINQ 的临时表

来自分类Dev

使用 LINQ,将表中的数据连接到多列表表单视图中的单行中

来自分类Dev

C#Linq使用多个字段比较列表值并返回不满足条件的项目

来自分类Dev

使用linq返回具有多个值存储在字典中的列表

来自分类Dev

在 WPF App 中使用 LINQ 返回基于相关表中 FK 的 EF 实体列表

来自分类Dev

即使表不返回匹配项,Linq 从多个连接中选择并返回所有行

来自分类Dev

使用LINQ连接两个表,同时还从第二个表返回空记录

来自分类Dev

使用连接计算 linq 语句

来自分类Dev

Linq 使用连接和分组

来自分类Dev

使用 LINQ 返回与值列表匹配的行列表

来自分类Dev

使用LINQ读取多个文件

来自分类Dev

使用多个条件的Linq查找

来自分类Dev

如何使用 LINQ 加入列表和大型列表/表