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();

こんにちは、私はいくつかのテーブルを結合する上記のクエリを持っています、そしてすべてが働いていました。次に、外部キーの一部が空である可能性があることに気付きました。

GroupByとの使用法を調査しましたがDefaultIfEmpty、それらは有望に聞こえたので、最初のJoinGroupJoinオンに変更してみましたが、これによりエラーが発生しました。

 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?)

誰か助けてもらえますか?

4

1 に答える 1

3

mGroup行内(device, mGroup) => new { device, mGroup.Name }は実際にはコレクション全体を表しています。あなたはそれにする必要があるでしょうSelect

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

詳細については、GroupJoinのMSDNページを確認してください。

于 2013-03-04T15:57:16.683 に答える