[解決済み] LINQ to Entities は、メソッド 'System.String Format(System.String, System.Object, System.Object)' を認識しません。
2023-04-08 05:49:51
質問
このようなLinqクエリを持っています。
private void GetReceivedInvoiceTasks(User user, List<Task> tasks)
{
var areaIds = user.Areas.Select(x => x.AreaId).ToArray();
var taskList = from i in _db.Invoices
join a in _db.Areas on i.AreaId equals a.AreaId
where i.Status == InvoiceStatuses.Received && areaIds.Contains(a.AreaId)
select new Task {
LinkText = string.Format(Invoice {0} has been received from {1}, i.InvoiceNumber, i.Organisation.Name),
Link = Views.Edit
};
}
しかし、問題があります。タスクを作成しようとしています。新しいタスクごとに、リンクテキストを "Hello" のような定数文字列に設定すると、うまくいきます。しかし、上記では、請求書のプロパティを使用してプロパティリンクテキストを作成しようとしています。
このエラーが発生します。
base {System.SystemException} = {"LINQ to Entities は 'System.String Format(System.String, System.Object, System.Object)' メソッドを認識せず、このメソッドはストア式に変換できません("}。
どなたか理由をご存じですか?また、これを動作させるための代替方法をご存知の方いらっしゃいますか?
どのように解決するのですか?
Entity Frameworkは、SQL側でプロジェクションを実行しようとしています。
string.Format
. 使用方法
AsEnumerable()
を使って、Linq to Objectsでその部分を強制的に評価することができます。
ベースとなる 前の答えに 私はあなたに与えた私はこのようにあなたのクエリを再構築します。
int statusReceived = (int)InvoiceStatuses.Received;
var areaIds = user.Areas.Select(x=> x.AreaId).ToArray();
var taskList = (from i in _db.Invoices
where i.Status == statusReceived && areaIds.Contains(i.AreaId)
select i)
.AsEnumerable()
.Select( x => new Task()
{
LinkText = string.Format("Invoice {0} has been received from {1}", x.InvoiceNumber, x.Organisation.Name),
Link = Views.Edit
});
また、クエリの中で関連するエンティティを使用していますね (
Organisation.Name
) を追加していることを確認してください。
Include
var taskList = (from i in _db.Invoices
where i.Status == statusReceived && areaIds.Contains(i.AreaId)
select new { i.InvoiceNumber, OrganisationName = i.Organisation.Name})
.AsEnumerable()
.Select( x => new Task()
{
LinkText = string.Format("Invoice {0} has been received from {1}", x.InvoiceNumber, x.OrganisationName),
Link = Views.Edit
});
関連
-
[解決済み] C# LINQ リスト内の重複を検索する
-
[解決済み] LINQ to Entitiesはメソッドを認識しません。
-
[解決済み】Lambda式でOrderBy descending?
-
[解決済み] エンティティフレームワークのLinqクエリInclude()複数の子エンティティ
-
[解決済み] LINQ-to-SQLとストアドプロシージャの比較?[クローズド]
-
[解決済み] 指定された型メンバー 'Date' は LINQ to Entities でサポートされていません。イニシャライザ、エンティティ・メンバ、およびエンティティ・ナビゲーション・プロパティのみです。
-
[解決済み] LINQ: 区分された値
-
[解決済み] LINQ OrderByとThenByの比較
-
[解決済み] LINQ to Entities は 'System.String ToString()' メソッドを認識せず、このメソッドはストア式に変換できない。
-
[解決済み] NHibernateとLINQ to SQLの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] IEnumerable<T>のforeachのLINQでの等価性
-
[解決済み】Lambda式でOrderBy descending?
-
[解決済み] エンティティフレームワークのLinqクエリInclude()複数の子エンティティ
-
[解決済み] LINQを使用してデータをPivotすることは可能ですか?
-
[解決済み] Linqのgroup byのカウントを持つ
-
[解決済み] LINQ OrderByとThenByの比較
-
[解決済み] Linq:where節に条件を条件付きで追加する
-
[解決済み] NHibernateとLINQ to SQLの比較
-
[解決済み] LINQのOn句で複数条件を指定してのJoin
-
[解決済み] LINQでコレクションをページングする