Linq と EF の使用
1 つUser
は複数持つことができますRoleUserLinks
。
User
のRoleUserLink
テーブルに 2 つのレコードが含まれている場合(1 つはLinkStatusID
ofDeleted
を持ち、もう 1 つはLinkStatusID
ofを持ちAdded
ます)、以下のクエリは を返しますUser
。私はこれをしたくありません。
user
関連する が存在する場合に を返さない方法については、以下のケース 3LinkStatusID
をAdded
参照してください。
IEnumerable<User> z =
(from users in listOfUsersForReviewer
join roleUserLinks in context.RoleUserLinks
on users.UserID equals roleUserLinks.UserID into roleUserLinksJoin
// left join
from roleUserLinks in roleUserLinksJoin.DefaultIfEmpty()
where
// case 1 - has never been added to a role ie record isn't there
roleUserLinks.LinkStatus == null
// case 2 - has been soft deleted from a role so we want this record
|| roleUserLinks.LinkStatusID == (byte)Enums.LinkStatus.Deleted
select users).Distinct();
ケース 1) ユーザーには関連付けられRoleUserLink
たレコードがありません。ユーザーは期待どおりに返されます
ケース 2) ユーザーには 1 件の関連付けられRoleUserLink
たレコードLinkStatusID
が削除されています。ユーザーは期待どおりに返されます
ケース 3) ユーザーには 2 つの関連付けられRoleUserLink
たレコードがあります。1 件のLinkStatusID
が削除されました。ユーザーを返すべきではありません