一貫性のあるGroupJoinをほとんど使用せずにObjectQueryを作成しようとしています。つまり、メインテーブルを1つ選択し、LEFTJOINを追加する必要があります。SelectManyメソッドを使用すると、フィールドRoleIDにアクセスできないため、次のように実行します。
var routesQuery = entities.Routes.Join(
entities.Locales,
Routes => Routes.LocaleID,
Locales => Locales.LocaleID,
(Routes, Locales) => new { Routes = Routes }
).GroupJoin(
entities.LinkRolesPermissions,
Routes => Routes.Routes.RouteID,
LinkRolesPermissions => LinkRolesPermissions.EntityID,
(Routes, LinkRolesPermissions) => new
{
LinkRolesPermissions = LinkRolesPermissions,
RoleID = LinkRolesPermissions.SelectMany(
LRS => LRS.RoleID,
(LRS, RoleID) => new { RoleID = LRS.RoleID }
)
}
)
.SelectMany(
LinkRolesPermissions => LinkRolesPermissions.RoleID,
(LinkRolesPermissions, RoleID) => new { RoleID = RoleID }
).GroupJoin(
entities.aspnet_Roles,
LRS => LRS.RoleID,
RLS => RLS.RoleId,
(LRS, RLS) => new { LRS = LRS }
);
すべてが機能していますが、何らかの方法でINNER JOINとして機能しています。私は、SelectManyメソッドがこの動作を引き起こすことに気付きました。このクエリを生成します:
SELECT 1 AS [C1], 1 AS [C2], [Extent3].[RoleID] AS [RoleID] FROM [dbo].[Routes] AS [Extent1]
INNER JOIN [dbo].[Locales] AS [Extent2] ON ([Extent1].[LocaleID] = [Extent2].[LocaleID]) OR (([Extent1].[LocaleID] IS NULL) AND ([Extent2].[LocaleID] IS NULL))
INNER JOIN [dbo].[LinkRolesPermissions] AS [Extent3] ON ([Extent1].[RouteID] = [Extent3].[EntityID]) OR (([Extent1].[RouteID] IS NULL) AND ([Extent3].[EntityID] IS NULL))
私はそれを削除し、次のエラーが発生しました:
var routesQuery = entities.Routes.Join(
entities.Locales,
Routes => Routes.LocaleID,
Locales => Locales.LocaleID,
(Routes, Locales) => new { Routes = Routes }
).GroupJoin(
entities.LinkRolesPermissions,
Routes => Routes.Routes.RouteID,
LinkRolesPermissions => LinkRolesPermissions.EntityID,
(Routes, LinkRolesPermissions) => new
{
LinkRolesPermissions = LinkRolesPermissions,
RoleID = LinkRolesPermissions.SelectMany(
LRS => LRS.RoleID,
(LRS, RoleID) => new { RoleID = LRS.RoleID }
)
}
)
.GroupJoin(
entities.aspnet_Roles,
LRS => LRS.RoleID,
RLS => RLS.RoleId,
(LRS, RLS) => new { LRS = LRS }
);
メソッド'System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable、System.Func>、System.Func)'の型引数は、使用法から推測できません。タイプ引数を明示的に指定してみてください。
誰かが私にこの振る舞いを説明してくれませんか、そして可能であればそれを修正する方法をアドバイスしてください。
前もって感謝します。