web-dev-qa-db-ja.com

ラムダ式はデリゲート型ではないため、「string」型に変換できません

私は次のようなLINQラムダ式を使用しています:

int Value = 1;
qryContent objContentLine;

using (Entities db = new Entities())
{
    objContentLine = (from q in db.qryContents
                      where q.LineID == Value
                      orderby q.RowID descending
                      select q).FirstOrDefault();
}

ただし、次のエラーが表示されます。

ラムダ式はデリゲート型ではないため、「string」型に変換できません

98
Deep Sharma

このシステムクラスからusing System.Linq;が欠落していると思います。

また、コードにusing System.Data.Entity;を追加します

258
S. S. Rawat

私の場合、using System.Data.Entity;を追加する必要がありました

94
skb

私が使っていた解決した私のケース

@Html.DropDownList(model => model.TypeId ...)  

を使用して

@Html.DropDownListFor(model => model.TypeId ...) 

それを解決します

12
user4238584

他のユーザーが述べたディレクティブを使用していないことに関連していない場合、クエリに別の問題がある場合にも発生します。

VSコンパイラのエラーリストを見てください:たとえば、クエリの「値」変数が存在しない場合、「ラムダから文字列への」エラーが発生し、不明/誤ったフィールド。

あなたの場合、次のようになります。

objContentLine = (from q in db.qryContents
                  where q.LineID == Value
                  orderby q.RowID descending
                  select q).FirstOrDefault();

エラー:

エラー241ラムダ式はデリゲート型ではないため、型 'string'に変換できません

エラー242デリゲート 'System.Func <..>'は1つの引数を取りません

エラー243名前 'Value'は現在のコンテキストに存在しません

「値」変数エラーを修正すると、他のエラーも消えます。

4
AFract

これにつまずいた人のために、すべての参照と適切に配置されたステートメントを使用してスローされたこのタイプのエラーを解決しました。宣言されたDataTableでDataTableを呼び出すのではなく、DataTableを返す関数に代入すると、明らかに混乱が生じます。例えば:

これは私のために働いた:

DataTable dt = SomeObject.ReturnsDataTable();

List<string> ls = dt.AsEnumerable().Select(dr => dr["name"].ToString()).ToList<string>();

しかし、これはしませんでした:

List<string> ls = SomeObject.ReturnsDataTable().AsEnumerable().Select(dr => dr["name"].ToString()).ToList<string>();

理由はまだ完全にはわかりませんが、このタイプのエラーに誰かがイライラしている場合は、試してみてください。

3
Matthew