質問は、私が以前にこの方法では、のように動作します上記の問題の方法はヌルチェックが
public List<User> GetActiveUsers(int? officeID, string roleID, string query)
{
return (from user in GetDBContext.User
join userRole in GetDBContext.UserRole
on user.UserID equals userRole.UserID
join userOffice in GetDBContext.UserAuthorizedOffice
on user.UserID equals userOffice.UserID
where user.IsActive == true &&
user.UserTypeID == 1 &&
userOffice.IsAuthorized &&
userOffice.Office.IsActive &&
(userOffice.OfficeID == officeID || officeID == null) &&
string.Equals(userRole.RoleID, roleID) &&
(user.FirstName + user.LastName).Contains(query)
select user).ToList();
}
の下から変更された答えhttps://stackoverflow.com/a/41822351/2004251
と答えたSystem.NotSupportedException - Cannot compare elements of type 'System.Linq.IQueryable
を尋ねました期待される。
私の質問:null
チェックはこの方法で動作するかどうかの入力パラメータが最初のケースではIEnumerable<int>
私はSQLの専門家ではないんだけど、これは私の推測です。この例では、1つの 'int? '値がNULLに等しいかどうかを確認しています。これはSQLに相当します。参照される質問では、コレクション全体がNULLであるかどうかをチェックしていますが、これはSQL文に変換するのが簡単ではありません。 – Abion47
_inputパラメータ_が「IEnumerable」、officeIDに変更されていますか?それはまったく異なるクエリです。 –
@TimSchmelterはい、 'int? officeID'が「IEnumerable officeIDs」に変更されました –
gvk