我有下表

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进行比较。

10-06 03:28