2016-09-01 4 views
2

linq queryを使用して、データテーブルから2つの異なる列idとnameを選択しています。私は以下のコードを持っていますが、それはエラーを投げている特定のキャストが無効です。Linqのデータテーブルから別の行を選択

sdatatable = ds.Tables[0].AsEnumerable().Where(x => x.Field<string>  
      ("TableName") == "header").CopyToDataTable(); 

rptcourse.DataSource = sdatatable.AsEnumerable().Select(row => new 
     { 
      locationid = row.Field<string>("locationID"), 
      locationname = row.Field<string>("locationname") 
     }).Distinct(); 

任意の提案が役立ちます。

+0

sdatatableの種類が何でありますか? –

+0

これはデータテーブルです。 –

+0

*正確な*例外メッセージを表示してください。あなたがそこにあるタイプを見ないと、あなたを助けることはできません。 –

答えて

4

DataSourceはおそらくList<T>を期待していますが、このコードはIEnumerble<T>を返します。 Distinct()ToList()を追加します。

rptcourse.DataSource = sdatatable.AsEnumerable().Select(row => new 
     { 
      locationid = Convert.ToInt32(row["locationid"]), 
      locationname = row.Field<string>("locationname") 
     }).Distinct().ToList(); 

また、単に2つのクエリをこのように参加することができます。

rptcourse.DataSource = ds.Tables[0].Where(x => x.Field<string>("TableName") == "header") 
      .Select(row => new 
      { 
       locationid = Convert.ToInt32(row["locationid"]) 
       locationname = row.Field<string>("locationname") 
      }) 
      .Distinct().ToList(); 
+0

2つのソリューションを試しましたが、同じエラーが表示されます。 –

+0

@BVidhya - どの時点で例外が発生していますか?それは何と言う - 無効なキャストですか? –

+0

属性locationidおよびlocationnameで、特定のエラーをスローします。キャストは無効です。私は、locationidのフィールド型をintに変更しました。しかし、まだエラーをスローする –

関連する問題