首页 > 解决方案 > Linq:一个匿名类型不能有多个同名的属性

问题描述

如何使用相同名称在 linq 表达式中使用 GroupBy?,我有以下代码从多个实体获取数据。我有 RP 和 SubParty 表都有一个 Name 字段,我想显示两者,但 linq 给了我以下错误

一个匿名类型不能有多个同名的属性

var rp = await context.RP.AsNoTracking()
        .Include(rp => rp.SubPartyNav)
        .Include(rp => rp.partyNav)
        .Where(rp => rp.ProductID == request.ID)
        .GroupBy(rpSp => new
        {
                rpSp.partyNav.PartyName,
                rpSp.SubPartyNav.PartyNav.PartyName })
        .Select(r => new RspDTO
        {
                PartyName = r.Key.PartyName,
                SubPartyName = r.Key.PartyName, })
        .ToListAsync();

标签: c#asp.net-mvclinq

解决方案


只需明确给出属性名称:

        .GroupBy(rpSp => new
        {
                PartyName = rpSp.partyNav.PartyName,
                SubPartyName = rpSp.SubPartyNav.PartyNav.PartyName })
        .Select(r => new RspDTO
        {
                PartyName = r.Key.PartyName,
                SubPartyName = r.Key.SubPartyName, })

此外,它看起来更像你想要的,.Distinct()而不是.GroupBy(),因为你只使用组键:

        .Select(rpSp => new
        {
                PartyName = rpSp.partyNav.PartyName,
                SubPartyName = rpSp.SubPartyNav.PartyNav.PartyName })
        .Distinct()
        .Select(r => new RspDTO
        {
                PartyName = r.PartyName,
                SubPartyName = r.SubPartyName, })

推荐阅读