我有下表
Users
- ID
- FirstName
- LastName
MultiplyItems
- ItemID
- Title
UserMultiplyItems
- UserID
- ItemID
我有一个变量
List<int> delegateList = {1, 3, 5};
其中1、3、5是ItemID
我要选择所有用户,其中至少一个ItemID链接了可选用户。
我尝试以下方法:
var result = from i in _dbContext.Users
where
((delegateList == null) || i.MultiplyItems.Any(p=> delegateList.Any(a => a == p.ItemID)))
select new UserModel()
{
....
};
但它不起作用。错误:
无法比较类型为'System.Collections.Generic.List'1'的元素。
仅原始类型,枚举类型和实体类型是
支持的。
如何正确做?
谢谢
最佳答案
我会写这个:
var filteredUsers = delegateList == null
? _dbContext.Users
: _dbContext.Users.Where(user => user.MultiplyItems
.Any(item => delegateList.Contains(item.Id)));
var result = filteredUsers.Select(user => new UserModel
{
//the UserModel initialization
});
您不应在查询中检查以下行:
delegateList == null
它被翻译成SQL,SQL不知道什么是List以及如何将其与null进行比较。