2016-06-25 21 views
0

私のクエリは、このようなものです:linq where句に結合された列を追加するにはどうすればよいですか?

var list = context.Items 
    .Where(i => i.Title.StartsWith(searchValue) || 
      (i.Title + string.format("{0}prep", i.OrderNumber)) 
       .StartsWith(searchValue)) 
    .ToList(); 

しかし、私はgettings例外だ - オブジェクトオブジェクトのインスタンスに設定されていません。
.AsEnumerable.Whereの後に追加しようとしましたが、動作しません。 AsEnumerableなし


私は取得しています:エンティティへ

LINQは方法 ' フォーマット(可能System.String、System.Objectのを)可能System.String' メソッドを認識しない、そしてこの方法は を翻訳することはできませんストア式に変換します。

私はここで間違っていましたか?

+0

String.Formatの( "{0}準備を")):あなたの代わりにこれを使用することができるように

は幸いな文字列の連結は、サポートされています?!このコードはコンパイルされません。実際のコードを貼り付けてください。 – user3185569

+0

何かがnullです... 'context'または' context.Items'のいずれかが 'null'であるか、' Items'にいくつかの値がnullを含み、 'i.Title ..のような述語で項目のメンバーにアクセスしようとするとスローします。 'i'がnullの場合は' .'を返します。 – blins

+0

nullはありません。私はデータベースをチェックし、すべての値が存在します。また、AsEnumerableが追加されたときに別の例外で質問を更新しました。 – 1110

答えて

2

私はここで間違っていましたか?

答えが例外メッセージである:エンティティへ

LINQは方法System.String Format(System.String, System.Object)方法を認識しない、そしてこの方法は、ストア式に変換することができません。

つまり、string.FormatメソッドはSQLクエリに変換できないため、サポートされていません。

var list = context.Items.Where(i => i.Title.StartsWith(searchValue) 
    || (i.Title + i.OrderNumber + "prep").StartsWith(searchValue)) 
    .ToList(); 
+0

ありがとうございます。小規模なサブ質問には問題はない。 i.OrderNumber..ToString( "D2")を使用する場合、これはなぜこのようなクエリでは不可能ですか? – 1110

+0

同じ理由から。 "D2"は.NETフレームワーク形式で、文字列形式を受け入れる 'int.ToString'メソッドです。それを何らかのデータベース機能にマップすることは技術的に不可能だとは言えませんが、EFのデザイナーはそれをしないと決めました。通常、結果を書式設定する必要がある場合は、単純に 'AsEnumerable'を使用して、すべてのフレームワークメソッドをサポートするLINQ to Objectsで行いますが、' Where'の場合は、フィルタリングする前にメモリ内のすべてのデータを取り込むため、 [このリンク](https://msdn.microsoft.com/en-us/library/bb738681(v = vs.110).aspx)には、サポートされている情報が含まれています。 –

関連する問題