私はこれについてかなり長い間調査してきましたが、解決策がわかりません。私あなたが見ることができるように本来の動的LINQ文をフォーマットしようとしました、ここで 、この記事で
私はクラスを宣言しました:
public class DynamicHelper
{
public string FormattedLink(string DisplayText, string ID)
{
return "<a href='/Title/Preview/'" + ID + ">" + DisplayText + "</a>";
}
public string FormattedLink(string DisplayText, int ID)
{
return "<a href='/Title/Preview/'" + ID + ">" + DisplayText + "</a>";
}
}
DynamicLinqの事前定義されたタイプに新しいタイプを挿入した後
,typeof(DynamicHelper) //around line 635
動的linq選択内でFormattedLinkを呼び出そうとしているプログラムがあります。
using (var Model = new MK3Entities())
{
DynamicHelper Dh = new DynamicHelper();
var TOrigin = (Model.Titles.Where("ID > 19632")
.Select("new(ID, @0.FormattedLink(ExtTitleID, ID) as ExtTitleID )", Dh) as System.Collections.IEnumerable)
.Cast<dynamic>().Take(10).ToList();
Console.ReadKey();
}
このプログラムを実行すると、「LINQ to Entitiesはメソッド 'System.String FormattedLink(System.String、Int32)'メソッドを認識せず、このメソッドをストア式に変換できない」というランタイム例外が発生します。
これを修正する方法についてのアイデア...動的選択からの単純なフォーマットが必要です。
エラーメッセージはかなり自明です。データベースはそのメソッドをSQLに変換する方法を知りません。メソッドがデータベースクエリで必要とする情報をフェッチし、クエリではなく結果に対してその関数を呼び出す必要があります。
私は数時間前に同様の問題を解決しました。
動的linqで動作するToList()
が必要ToList()
。このスレッドをチェックしてください: 動的オブジェクトのプロパティまたはフィールドが見つかりません
それらをプロジェクトにコピーして貼り付け、後で:
var TOrigin = (Model.Titles.Where("ID > 19632")
.ToAnonymousList()
.Select("new(ID, @0.FormattedLink(ExtTitleID, ID) as
ExtTitleID )", Dh) as System.Collections.IEnumerable);