Linq包含ListItems

时间:2012-04-23 11:52:20

标签: linq entity-framework linq-to-entities

我正在尝试从程序表中返回与传递列表中的项匹配的记录,但是我收到以下错误:

参数类型'System.Nullable'不能分配给参数类型'System.Web.UI.WebControls.ListItem'

void PopulateEvents(List<ListItem> programs)
{
    var rows = from table in db.Events.AsEnumerable()
               where programs.Contains(table.ProgramID)
               select Events;
}

4 个答案:

答案 0 :(得分:2)

我不会使用AsEnumerable(),因为它会关闭整个Events表并使用linq-to-objects执行您的查询。

无论您是选择删除AsEnumerable(),我都会修改您的查询以使用Any运算符而不是Contains方法,并且您需要使用{{ListItem中的属性1}}匹配ProgramID属性。这应该可以解决您的错误消息。

 var rows = from table in db.Events
            where programs.Any(p => p.ID == table.ProgramID)
            select table;

答案 1 :(得分:0)

ProgramID的{​​{1}}列/属性可以为空(在db中)。 Events检查需要programs.Contains不可为空。

根据您所处情况适当的情况,您可以将ListItem的{​​{1}}列/属性更改为不接受空值,或者您可以将ProgramID转换为不可为空的Events }。 (或者让table.ProgramID成为可以为空的ListItem列表:ListItem。)

编辑:
Aducci是一个优雅的解决方案,无效;-)我的建议。

答案 2 :(得分:0)

试试这个

void PopulateEvents(List<ListItem> programs) 
{     
       var rows = from table in db.Events.AsEnumerable()               
                  where programs.Cast<ListItem>().Select( y => y.Text).Contains(table.ProgramID.Value.ToString())                
                  select table; 
} 

答案 3 :(得分:0)

void PopulateEvents(List<string> programs)
{
    var rows = db.Events.Where(i => programs.Contains(i.ProgramID)).Select(i => db.Events);
}