2012-04-23 55 views
0

我试图返回从节目表匹配通过列表中的项目的记录包含但我收到以下错误:的LINQ从listItems中

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

回答

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

EventsProgramID列/属性是可空的(在分贝)。 programs.Contains检查需要一个不可空的ListItem

取决于什么适合你的情况,你可以的EventsProgramID列/属性更改为不接受空值,或者你可以投table.ProgramID到非可空ListItem。 (也许让programs可空listItems中的列表:List<ListItem?>

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

+0

我没有使用LINQ到实体,所以我可能会关闭为此工作。 – 2012-04-23 12:34:17

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; 
} 
2

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

无论您选择删除AsEnumerable(),我将修改您的查询使用Any运营商,而不是Contains方法,你需要从该ProgramID属性相匹配的ListItem使用属性。这应该可以解决你的错误信息。

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