查询不返回任何内容

时间:2012-07-23 10:50:00

标签: c# .net linq linq-to-sql

我有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是空的。

3 个答案:

答案 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();