【问题标题】:Linq to SQL how to do “where [column] in (list of values)”Linq to SQL 如何执行“where [column] in (list of values)”
【发布时间】:2016-10-24 16:25:10
【问题描述】:

我有一个字段列表:

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, 版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089]]' 键入“System.Object”。 LINQ to Entities 仅支持转换 EDM 原始类型或枚举类型。

问题在:

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

但我不知道如何解决。

【问题讨论】:

  • 试试where Fields_Of_User.Any(fieldid => fieldid.Field_ID == item.Field_ID)
  • 它在 fieldid.Field_ID 中出现错误

标签: c# asp.net-mvc linq


【解决方案1】:

问题很可能是第一个查询生成了一个可以为空的ints 列表,而搜索需要一个不可为空的列表。由于无论如何您都不会匹配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
);

【讨论】:

  • 此语句无效:Fields_Of_User.Contains(item.Field_ID)
  • @ThếHiệp 第一个更改是否使您的第二个查询版本正常工作?
  • @ThếHiệp 你在一个已经是int的值上取消引用Field_ID。请查看编辑。
  • Fields_Of_User 始终不为空
猜你喜欢
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2022-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多