1

winery と wineType の 2 つのテーブルがあります (wineType には、ワイナリー ID と呼ばれるワイナリーの外部キーがあります)。クライアントがドロップダウン リストから選択したようなワインを生産するすべてのワイナリー名を取得しようとしました。そして、私はこの機能を持っています

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

編集

注: コードから select から new を削除します。問題の 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();
于 2012-07-23T10:53:36.697 に答える