web-dev-qa-db-ja.com

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

C#ベースのコードでEntity Frameworkを使用しています。私は予想外の奇妙さに遭遇し、提案を探しています。

ケース1、2、3、4 ...プロジェクト:
RivWorks.dll
RivWorks.Service.dll
RivWorks.Alpha.dll

サンプル(これらすべての作業):
RivWorks.Alpha.dll:

public static bool EndNegotitation(long ProductID)
{
    var product = (from a in _dbFeed.AutoWithImage 
                   where a.AutoID == ProductID select a).FirstOrDefault();
...
}

RivWorks.Service.dll

public static RivWorks.Model.NegotiationAutos.AutoWithImage 
    GetProductById(long productId)
{
    var myProduct = from a in _dbFeed.AutoWithImage 
                    where a.AutoID == productId select a;

    return myProduct.FirstOrDefault();
}
public static List<RivWorks.Model.NegotiationAutos.AutoWithImage> 
    GetProductByCompany(Guid companyId)
{
    var myProduct = from a in _dbFeed.AutoWithImage 
                    where a.CompanyID == companyId select a;

    return myProduct.ToList();
}

ケース「奇妙さ」:
RivWorks.Web.Service.dll(WCFプロジェクト)
他のプロジェクトと同じ参照が含まれています。

public NegotiateSetup GetSetup(string method, string jsonInput)
{
    ...
    long.TryParse(ProductID, out result);
    var product = (from a in _dbFeed.AutoWithImage 
                   where a.AutoID == result select a).FirstOrDefault();
    ...
}

このコンパイル時エラーが発生しています(エディターで「場所」という単語が強調表示されています):
ラムダ式はデリゲート型ではないため、「string」型に変換できません

これを引き起こす原因は何ですか?

72
Keith Barrows

結果に興味がある人のために:
コードの先頭に単純なUsingステートメントがありませんでした。

using System.Linq;

これで修正されました。

111
Keith Barrows

私の場合、それは欠落していました

using System.Data.Entity;

97
Miguel Galante
using System.Linq;
using System.Data.Entity;
10
Dorathoto

約1時間、Razorビュー内のTelerik Gridテンプレートでこれに苦労していました。私の場合、これ:

columns.Bound(x => x.ID).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.ID)">@item.ID</a></text>);

これになるはずでした:

columns.Bound(x => x.Id).Template(@<text><a href="@(Model.AppUrl + AdditionalFeeTypes/Details/" + item.Id)">@item.Id</a></text>);

「Id」のケースは間違っていました!これが誰かの助けになることを願っています。存在しないプロパティを配置しただけで、このエラーが発生する可能性があります!

7
Chris

私の場合、私は

Using System.Linq;

しかし、where句の項目の後に&&がありませんでした。

悪いコード:

item.Group.ID == grp.ID
p.Product_Status_Flag == 1 &&
item.Valid

正しいコード(エラーなし):

item.Group.ID == grp.ID && // <- This was missing and I didn't see it right away.
p.Product_Status_Flag == 1 &&
item.Valid

これが誰かの時間を節約することを願っています。

7
jhamm

私はこれにつまずいて、別の修正を見つけました。私はvar query = context.Contacts.Where(c => c.FullNameReverse == "TingTong");を使用しており、言及されたエラーを取得していました。間違いは、メソッドFullNameReverse()をプロパティFullNameReverseとして使用していたことです。 ()を逃しました!!!

2
FastDev

私はMVC 3カミソリで同じ問題を抱えていたかもしれない誰かが同じかもしれないので、私の状態でそれを修正する方法を示したい

List<Taksit> lst = db.Taksit.Where(y => y.OgrenciId.Equals(Convert.ToInt32( list[0].Id))).ToList();

私は含むを使用しようとしましたが、OgrenciIdはintですここで言及されたエラーが発生するので、等しいを使用することで問題が解決されます

1
mathel

スレッドは少し古いですが、私はこれに遭遇したばかりで、「ネット上の答えは何もありませんでした。あるサイトは答えにつながるものについて言及しましたが、これはデータ型の問題でしたが、残念なことに再び見つけることができないので、ここに自分の解決策を投稿しています。将来のサーチャーはそれから利益を得るかもしれません。

オリジナル:IQueryableテスト= rからr.Record_ID == 100で、rを選択。

ここで、Recordsは、以前のLINQエクスプレスオンの結果であるIQueryableです。

修正は、式でレコードをキャストすることです:(IQueryable <record>)Records。それを見つけて、それは完全に理にかなっています。レコードは入力されないため、r.Record_IDが有効な場合、LINQには手がかりがありません。混乱はエラーメッセージであり、これは「ネット上に何十もの場所に表示されます。ほとんどすべての場合、ソリューションは2つのusing句の1つが欠落しています。私が見つけた1つか2つは使用上の問題ではなく、それを修正したものを投稿することを気にしませんでした。

お役に立てれば...

1
Ragnorok

私の問題はフォーマットに関係していました:

.Columns(columns => {
    columns.Bound(p => p.Id).Filterable(false);
    columns.Bound(p => p.Name).Width(250);
    ...

このエラーが発生したすべてのp.Whatever。

これはMVCを使用したプロジェクトで、モデルのこれらの変数(Id、Nameなど)に「public static int」または「public static string」が含まれていることが問題であることがわかりました。すべてのモデル変数の「静的」を削除しても、エラーは発生しません。約1日私を夢中にさせていました...

0
vapcguy

私は似たような問題を抱えていましたが、Rxと私の場合は追加しました

using System;

助けた。 FWIW

これらの拡張メソッドが欠落していると、面倒なことが時々あります。

0
Valentin Kuzub

わずかに異なるバージョンでこの問題が発生しました。
ラムダ内から(静的)メソッドを呼び出す必要がある場合、戻り値の型を確認してください。戻り値の型がIEnumerable(ラムダを使用している場合によくある)である必要があるが、オブジェクトを返す場合、明らかに問題があります。

0
Andi Truman

列をTelerik MVCグリッドにバインドするのと同様の問題がありました。 ViewModelクラスにIdプロパティがありました。 (上記のChrisの回答に触発されました)XxxIdに名前を変更すると、問題はなくなりました。 MVCがIdプロパティに対して特別なことをしていることを思い出すようです。

0
Craig Fisher

私の場合、Sharepoint 2013アプリでclientContext.Loadにインクルードを使用しようとすると、このエラーが発生しました。

次のようなSharepointクライアントライブラリを含めました。

using SP = Microsoft.SharePoint.Client;

修正するために、さらに名前空間なしで追加しました:

using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;
0
Demelziraptor

System.Linqを使用してみてください。この問題を解決するのに役立つと思います。

0
Jinto John