このLINQ To SQLクエリを検討してください。それは意図なのは[]の検索語の文字列を取り、SQLテーブルに異なるフィールドの束に条件を適用することです:LINQ To SQL例外:Contains演算子以外のクエリ演算子のLINQ to SQL実装でローカルシーケンスを使用できません
string[] searchTerms = new string[] {"hello","world","foo"};
List<Cust> = db.Custs.Where(c =>
searchTerms.Any(st => st.Equals(c.Email))
|| searchTerms.Any(st => st.Equals(c.FirstName))
|| searchTerms.Any(st => st.Equals(c.LastName))
|| searchTerms.Any(st => st.Equals(c.City))
|| searchTerms.Any(st => st.Equals(c.Postal))
|| searchTerms.Any(st => st.Equals(c.Phone))
|| searchTerms.Any(st => c.AddressLine1.Contains(st))
)
.ToList();
例外が発生します
ローカルシーケンスを使用することはできませんLINQで含まれています()演算子を除き、クエリ演算子のSQL実装に
質問: はなぜ、この例外が発生し、どのようにクエリがrewrittすることができますこの例外を回避するには?
@nitzmahone:ありがとう、PredicateBuilderをチェックします。有望! –
私はLinqToSqlの実装では、条件のいくつかがLinqToSqlプロバイダによって実装されていないことがあるので、 'PredicateBuilder'のawesomenessが失望することに懸念します。 –
+1 '.Contains()' - LinqToSqlでサポートされていない方程式の良い代替品です。 'PredicateBuilder'はオプションであっても注意が必要です。 –