LINQ GroupBy 报错

3
 var devSum = repository.Devices
                    .Where(dev => dev.Id == deviceId)
                    .Join(repository.ManagementGroups, device => device.ManagementGroupId, mGroup => mGroup.Id, (device, mGroup) => new { device, mGroup.Name })
                    .Join(repository.DataGroups, device_mGroup => device_mGroup.device.DataGroupId, dGroup => dGroup.Id, (device_mGroup, dGroup) => new { device_mGroup.device, managerName = device_mGroup.Name, dataName = dGroup.Name })
                    .Join(repository.DeviceTypes, d => d.device.TypeId, t => t.Id, (d, t) => new { d.device, d.dataName, d.managerName, TypeName = t.Name })
                    .SingleOrDefault();

你好,我有一个查询涉及到多个表,一切都正常工作。但是我意识到某些外键可能为空。

我已经研究过GroupByDefaultIfEmpty的使用方法,它们听起来很有希望,所以我尝试将第一个Join更改为GroupJoin,但这会引发错误:

 var devSum = repository.Devices
                    .Where(dev => dev.Id == deviceId)
                    .GroupJoin(repository.ManagementGroups, device => device.ManagementGroupId, mGroup => mGroup.Id, (device, mGroup) => new { device, mGroup.Name })
                    .Join(repository.DataGroups, device_mGroup => device_mGroup.device.DataGroupId, dGroup => dGroup.Id, (device_mGroup, dGroup) => new { device_mGroup.device, managerName = device_mGroup.Name, dataName = dGroup.Name })
                    .Join(repository.DeviceTypes, d => d.device.TypeId, t => t.Id, (d, t) => new { d.device, d.dataName, d.managerName, TypeName = t.Name })
                    .SingleOrDefault();

'AnonymousType#1' does not contain a definition for 'Name' and no extension method 'Name' accepting a first argument of type 'AnonymousType#1' could be found (are you missing a using directive or an assembly reference?)

Can anyone help please?


你能展示一下抛出异常的代码吗? - Kirill Bestemyanov
GroupJoin 版本在哪里? - gdoron
添加了我的编辑代码,错误在尝试获取mGroup.Name的行末的.GroupJoin处。 - DavidB
1个回答

3

mGroup 在这行代码中 (device, mGroup) => new { device, mGroup.Name } 实际上表示整个集合。你需要在它上面进行 Select 操作:

(device, mGroup) => new { Device = device, NameGroup = mGroup.Select(m => m.Name) }

有关GroupJoin的更多信息,请查看MSDN页面。


1
谢谢你,IronMan,但是那会抛出错误“Error 17:无效的匿名类型成员声明器。匿名类型成员必须使用成员赋值、简单名称或成员访问来声明。” - DavidB
1
看起来MSDN在他们的示例中有这个。我已经相应地编辑了我的答案。 - Corey Adler
1
谢谢,至少那一行的错误已经解决了!我会继续尝试自己纠正剩下的部分,并在我做到时回来接受这个答案。 - DavidB
1
其他错误只是在第二行更改名称,因为它们已经在第一行更改了。感谢你的帮助,伙计。 - DavidB
没问题。祝你的项目好运。 - Corey Adler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接