Linq SQL如何做到“在(值的列表)中[列]”

本文关键字:列表 何做 SQL Linq | 更新日期: 2023-09-27 18:14:44

我有一个字段列表:

var Fields_Of_User = (from item in db.Field_Relationship
                                  where item.User_ID == ID_Of_User
                                  select item.Field_ID
                                    ).ToList();

我想选择Question by list Fields

        var Questions = (from item in db.Questions
                                   where Fields_Of_User.Any(fieldid => fieldid.Equals(item.Field_ID))
                                   select item
                             );
然后我把它放到Viewbag
ViewBag.Questions= Questions;

View中,我称之为:

@foreach (var t in ViewBag.Questions)
{}

I got the Error:

无法强制转换类型'System. nullable ' 1[[System. null]。mscorlib Int32,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]'键入'System.Object'。LINQ到实体只支持铸造EDM基本类型或枚举类型。

问题在:

where Fields_Of_User.Any(fieldid => fieldid.Equals(item.Field_ID))

但我不知道如何修复它

Linq SQL如何做到“在(值的列表)中[列]”

问题很可能是第一个查询生成一个可空的int列表,而搜索需要一个不可空的列表。因为无论如何都不会匹配null,所以可以过滤非空值并在第一个查询中转换为int:

var Fields_Of_User = (from item in db.Field_Relationship
    where item.User_ID == ID_Of_User && item.Field_ID != null
    select (int)item.Field_ID
).ToList();

第二个查询需要重写如下:

var Questions = (from item in db.Questions
    where Fields_Of_User.Any(fieldid => fieldid == item.Field_ID)
    select item
);