0

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

参数类型“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

4 回答 4

2

我不会使用AsEnumerable(),因为它会关闭整个Events表并使用linq-to-objects.

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

 var rows = from table in db.Events
            where programs.Any(p => p.ID == table.ProgramID)
            select table;
于 2012-04-23T13:45:58.883 回答
0
void PopulateEvents(List<string> programs)
{
    var rows = db.Events.Where(i => programs.Contains(i.ProgramID)).Select(i => db.Events);
}
于 2013-01-08T15:46:02.453 回答
0

ProgramID列/属性可以Events为空(在数据库中)。programs.Contains检查需要一个ListItem不可为空的。

根据您的情况,您可以将ProgramID列/属性更改Events为不接受空值,或者您可以强制table.ProgramID转换为不可为空的ListItem。(或者让我们programs成为一个可以为空的 ListItems 的列表:List<ListItem?>。)

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

于 2012-04-23T12:29:13.167 回答
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; 
} 
于 2012-04-23T12:47:54.837 回答