3

別の投稿:Linq-To-Sqlは構成可能なクエリをサポートしていますか? where句を動的に構成/連結する方法についての議論がありました。これは「AND」(つまり、最初のwhere句と2番目のwhere句がANDで結合されている)で行われているように見えます。私が疑問に思っているのは、ORを使用してLinqクエリを作成する方法があるかどうかです。

例:

var people = from p in Person
             where p.age < 18
             select p

var otherPeople = from p in people
                  where p.firstName equals "Daniel"
                  select p

これにより、名が「Daniel」で18歳未満の人が表示されます。これらを結合して「Daniel」の名を持つ人または18歳未満の人を見つけるための構文を探しています。

注:私はADO.net Data Servicesを使用しているため、.Contains()を使用できません。

編集:Union Suggestion(Garry Shutlerによる)は、まさに私が機能的に探しているものです。私はそれに関して2つの考えられる問題に遭遇しました:

  1. 3番目の条件を実行すると複数のデータベースヒットが発生するようです(ユニオンはパラメーターとしてIEnumerableを使用しているようです)-コードで複数のANDおよびORステートメントを作成してから、1つのリクエストを実行したいと考えていました。
  2. UnionはADO.NetDataServicesでサポートされていません(非常に残念です)
4

4 に答える 4

2

Joe Albahari によるPredicateBuilderの使用についてはどうですか?

var predicate = PredicateBuilder.False<Person>();
predicate = predicate.Or(p => p.age < 18);
predicate = predicate.Or(p => p.firstName == "Daniel");

var query = Person.Where(predicate);
于 2008-12-15T11:22:27.267 に答える
1

ブログのセット内でキー値を検索するクエリを実行する方法について書きました。関連するリンクは次のとおりです。

ADO.NETデータサービスパートIの操作が含まれています

ADO.NETデータサービスパートIIの操作が含まれています

これを使用して、次のようなクエリを作成できます
//The set in which we have to search for a match
List<string> citiesIWillVisit = new List<string>() {"London","Berlin","Prague"};
var customersAround = nwContext.Customers
.IsIn<Customers>(citiesIWillVisit, c=> c.City);
foreach (Customers localCustomer in customersAround) {
System.Console.WriteLine(localCustomer.ContactName);
}

于 2009-11-03T20:02:56.500 に答える
1

述語オプションは、行く方法です。Union オプションは、適切な SQL を構築しません。参照http://social.msdn.microsoft.com/forums/en-US/linqprojectgeneral/thread/925b245d-5529-4a64-8cd4-4bc83ee6fe7a/

于 2009-02-13T20:19:35.233 に答える