Linq to SQL怎么做“where [column] in(values of values)”

时间:2016-10-24 16:25:10

标签: c# asp.net-mvc linq

我有一个字段列表:

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

我想选择问题列表字段

        var Questions = (from item in db.Questions

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

然后我将它放入Viewbag

ViewBag.Questions= Questions;

在视图中,我称之为:

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

我收到了错误:

  

无法转换类型'System.Nullable`1 [[System.Int32,mscorlib,   Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'   输入'System.Object'。 LINQ to Entities仅支持转换EDM   原始或枚举类型。

问题在于:

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

但我不知道如何解决它。

1 个答案:

答案 0 :(得分:1)

问题很可能是第一个查询产生了一个可空的SELECT * FROM JTEMP_PARTIAL; 列表,而搜索想要一个非空的列表。由于您无论如何都不会匹配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();