我有2个桌子:winery和wineType(在wineType中,我有葡萄酒厂的外键,名为wineryID)。我尝试获取所有酿酒的名称,就像客户从下拉列表中选择的那样。我有这个功能
public void ispolniLista()
{
DataClassesDataContext MyDB = new DataClassesDataContext();
var id = from wineT in MyDB.WineTypes where wineT.kind == ddlSorti.SelectedItem.Text select new { wineT.wineryID };
List<int> listaID = id as List<int>;
List<string> listaIminja = new List<string>();
try
{
foreach (int i in listaID)
{
var vname = from w in MyDB.Wineries where w.wineryID == i select new { w.name };
listaIminja.Add(vname.ToString());
}
lstVinarii.DataSource = listaIminja;
lstVinarii.DataBind();
}
catch (NullReferenceException err)
{
Console.Write(err.Message);
}
}
我没有任何结果,lstVinarii是空的。
答案 0 :(得分:2)
你在哪里投射结果:
List<int> listaID = id as List<int>;
您需要实例化它,以便实际枚举枚举,如下所示:
List<int> listaID = new List<int>(id);
然而,重写这个以利用连接是值得的,因为你将使用上面的方法弹出大量查询(因为你在循环中有一个查询)。
答案 1 :(得分:2)
List<int> id = ( from wineT in MyDB.WineTypes where wineT.kind == ddlSorti.SelectedItem.Text select wineT.wineryID ).ToList();
这样做!
答案 2 :(得分:1)
注意:从您的代码中删除新选择,无需创建也是一个问题的额外匿名类型
为了避免评论错误,请写这样的
var id = from wineT in MyDB.WineTypes
where wineT.kind == ddlSorti.SelectedItem.Text
select wineT.wineryID ;
从select中删除new,无需在下面的代码中创建额外的匿名类型
尝试
List<int> listaID = id.ToList<int>();
删除foreach循环并像这样写
var listaIminja= (from win MyDB.Wineries
where listaID .Contains( w.wineryID )
select w.name ).ToList();
lstVinarii.DataSource = listaIminja;
lstVinarii.DataBind();