2017-04-20 5 views
0

非常に簡単な質問です。私はちょうど今LINQを練習しているのですが、LINQの「どこに」の部分に条件を入力できるかどうかを知りたいですか?例c#LINQ式で実行したいコードを入力できます

from a in myPerson 
where a.Age > 15 
select a; 

ため し、私は、実行時に自分の状態を入力してもらいます。今度は25歳以上の年齢にしたいのですが、年齢ではなく名前でフィルタリングしたいと思っています。だから私はちょうどタイプする

where a.Name == "John" 

私はそれができるかどうか疑問に思います。

ありがとうございました!

+1

を多分あなたは[Linq.Dynamic](https://www.nuget.org/packages/System.Linq.Dynamic/) –

+1

を必要とするので、あなたの疑問を修正してくださいはい/いいえの質問ではありません。 – Amy

答えて

2

条件の値をハードコーディングする代わりに、変数を使用します。だからあなたの条件には、ランタイム

var age = //put your code for retrieving age 
from a in myPerson 
where a.Age > age 
select a; 
1

中に異なる値で扱うことができるのIQueryable

var ageConditiion = 15; 
var originQuery = from a in myPerson select a; 
var result1 = originQuery.Where(a => a.Age > ageConditiion).ToList(); 
var result2 = originQuery.Where(a => a.Name == "John").ToList(); 

照会可能文句を言わないデータベースへのすべてのリクエストを送信してください。

2

IQueryablesを作成できます。必要に応じてちょうどOrderByWhere追加などの句を追加します。

// passed as parameters 
int age; 
string name; 
bool sortByName; 

var persons = _dbContext.Person; 

// always filter by Age 
var result = persons.Where(p => p.Age > age); 

// additionally filter by Name if some condition is met 
if (age > 25) { 
    result = result.Where(p => p.Name == name); 
} 

// sort depending on parameter 
if (sortByName) { 
    result = result.OrderBy(p => p.Name); 
} 
else { 
    result = result.OrderBy(p => p.Age); 
} 

// query will be executed when you enumerate the IQueryable 
return result.ToArray(); 
関連する問題