1

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

4

3 回答 3

2

你在哪里投射这样的结果:

List<int> listaID = id as List<int>;

您需要实例化它,以便实际枚举可枚举,如下所示:

List<int> listaID = new List<int>(id);

但是,值得重写它以利用连接,因为您将使用上述方法弹出很多查询(因为您在循环中有一个查询)。

于 2012-07-23T10:52:37.550 回答
2
List<int> id = ( from wineT in MyDB.WineTypes where wineT.kind == ddlSorti.SelectedItem.Text select  wineT.wineryID ).ToList();

做这个 !

于 2012-07-23T11:14:51.987 回答
1

编辑

注意:从您的代码中从选择中删除新的,无需创建额外的匿名类型,这也是一个问题

为了避免评论错误这样写

  var id = from wineT in MyDB.WineTypes 
where wineT.kind == ddlSorti.SelectedItem.Text 
select wineT.wineryID ;

从选择中删除新的,无需在下面的代码中创建额外的匿名类型


尝试

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();
于 2012-07-23T10:53:36.697 回答