我正在尝试从程序表中返回与传递列表中的项匹配的记录,但是我收到以下错误:
参数类型'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 :(得分: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);
}