Linq と EF の使用
1 つUserは複数持つことができますRoleUserLinks。
UserのRoleUserLinkテーブルに 2 つのレコードが含まれている場合(1 つはLinkStatusIDofDeletedを持ち、もう 1 つはLinkStatusIDofを持ち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が削除されました。ユーザーを返すべきではありません