C# 查询不返回任何内容

C# 查询不返回任何内容,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,我有两个表:winery和wineType在wineType中我有winery的外键,称为wineryID。我尝试获取所有生产葡萄酒的酒厂名称,如客户从下拉列表中选择的名称。我有这个函数 public void ispolniLista() { DataClassesDataContext MyDB = new DataClassesDataContext(); var id = from wineT in MyDB.WineTypes where wineT.kind == d

我有两个表:winery和wineType在wineType中我有winery的外键,称为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是空的。

在这里,你要像这样铸造结果:

List<int> listaID = id as List<int>;
List<int> listaID = new List<int>(id);
您需要实例化它,以便实际枚举可枚举项,如下所示:

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

但是,为了利用联接,重新编写此文档是值得的,因为您将使用上述方法弹出许多查询,因为您在循环中有一个查询。

在这里,您将像这样强制转换结果:

List<int> listaID = id as List<int>;
List<int> listaID = new List<int>(id);
您需要实例化它,以便实际枚举可枚举项,如下所示:

List<int> listaID = id as List<int>;
List<int> listaID = new List<int>(id);
但是,为了充分利用连接,重新编写这篇文章是值得的,因为您将使用上述方法弹出许多查询,因为您在一个循环中有一个查询。

EDIT 注意:从您的代码中删除new From select,不需要创建额外的匿名类型,这也是一个问题

要避免注释错误,请这样写

  var id = from wineT in MyDB.WineTypes 
where wineT.kind == ddlSorti.SelectedItem.Text 
select wineT.wineryID ;
var listaIminja= (from win MyDB.Wineries
             where listaID .Contains( w.wineryID ) 
            select  w.name ).ToList();
      lstVinarii.DataSource = listaIminja;
      lstVinarii.DataBind();
从select中删除new,无需创建额外的匿名类型,与下面的代码相同

试一试

编辑 注意:从您的代码中删除new From select,不需要创建额外的匿名类型,这也是一个问题

要避免注释错误,请这样写

  var id = from wineT in MyDB.WineTypes 
where wineT.kind == ddlSorti.SelectedItem.Text 
select wineT.wineryID ;
var listaIminja= (from win MyDB.Wineries
             where listaID .Contains( w.wineryID ) 
            select  w.name ).ToList();
      lstVinarii.DataSource = listaIminja;
      lstVinarii.DataBind();
从select中删除new,无需创建额外的匿名类型,与下面的代码相同

试一试

做这个


做这个

你的listaID也是空的吗?我的代码现在更新了..只需检查它是否工作,回答是否适合你..你的listaID也是空的吗?我的代码现在更新..只需检查它是否工作,回答是否适用于您..告诉我此实例参数时出现错误:无法将List listaID=id.ToList的'System.Linq.IQueryable'转换为System.Linq.ParallelQuery'line@Katerina=我的代码现在更新了..请检查它是否工作我看到了你的更新,但是我仍然得到错误无法将Linq.IQueryable转换为Linq.ParallelQueryI得到错误告诉我此实例参数:无法将List listaID=id.ToList的'System.Linq.IQueryable'转换为System.Linq.ParallelQuery'line@Katerina=我的代码现在更新了..请检查它是否工作我看到了你的更新,但是我仍然收到错误无法将Linq.IQueryable转换为Linq.ParallelQuerythank you,但是我仍然收到错误无法将Linq.IQueryable转换为Linq.ParallelQuery。不知道“MyDB.WineTypes”是什么类型。。。你能做“MyDB.WineTypes.AsEnumerable”吗?谢谢,但我仍然得到错误,无法将Linq.IQueryable转换为Linq.ParallelQuery。不知道“MyDB.WineTypes”是什么类型。。。你能做“MyDB.WineTypes.AsEnumerable”吗??