1

私はSimple.dataを使用していますが、その答えは前述のテクノロジーではありませんが、要点を伝えるのに役立ちます。したがって、構文などは無視してください。

単純なクエリでデータベースにクエリを実行しています。ただし、一連の条件に基づいて、クエリが変更されます。

したがって、たとえば:(非常に単純で、おそらく5〜10の条件)

     var result;

     if(LoggedAtSelected)
     {
      // Condition 1 - Calls Logged after a certain date
      result = db.Jobs.FindAll(db.Jobs.Logged_At >= startDate);
     }
     else 
     {
      // Condition 2 - Calls Closed after a certain date
      result = db.Jobs.FindAll(db.Jobs.Closed_At >= startDate && dd.Jobs.Closed_At <= endDate);
     }

     foreach(var JobRecord in result)
     {
     }

これは上記の理想的なコードですが、varの動的バインディングと可変性を考えると、残念ながらこれは不可能です。このような状況のベストプラクティスは何ですか?私の唯一のアイデアは、すべての条件に対して「var result = condition ...」を記述し、if..else if..elseに、その型に変換した後にグローバル変数に割り当てることです。そしてそれを「foreach」で使用します。大変な作業に聞こえます。何か案は?それともそれですか!!!?!!!

4

3 に答える 3

6

それ以外の:

var result;

によって返される実際のタイプを使用しdb.Jobs.FindAllます:

IEnumerable<Job> result;
于 2012-09-03T12:14:24.520 に答える
0

注として、ifステートメントがクエリ自体ではなくクエリのフィルターを決定するので、そこでSimpleExpressionを構築し、後でクエリを実行することをお勧めします。例えば。

var whereCLause;

if(LoggedAtSelected)
{
  // Condition 1 - Calls Logged after a certain date
  whereClause = db.Jobs.Logged_At >= startDate;
}
else 
{
  // Condition 2 - Calls Closed after a certain date
  whereClause = db.Jobs.Closed_At >= startDate && dd.Jobs.Closed_At <= endDate;
}

List<Job> results = db.Jobs.All.Where(whereClause);
foreach(Job record in results)
{
  ...
}
于 2012-10-16T13:10:33.063 に答える
0

使用する型 (または新しい型を定義する方法) をコンパイラが正確に認識できる場合にのみ、var を使用できます。

あなたの場合、次のタイプで定義することができます

List<Job> result;

または、コンストラクターを呼び出してインスタンスを返します。

var result = new List<Job>;

(もちろん、クエリは List ではなく IEnumarable インスタンスを返します。列挙型をインスタンス化できないため、例として List を使用しました。)

于 2012-09-03T12:17:36.783 に答える