1

私は現在、私に与えなければならない式メソッド(linq to entityクエリで使用される)を開発しています

  • 特定の期間の日数(開始日と終了日)
  • 特別な日が期間内にある場合は、この日数を減らします。

私の考えは次のとおりでした:

  • すべての日付(およびEnumerable.Range)を使用して列挙可能ファイルを生成します
  • MyEnumerable.Where(a => a!= "20120101")のように、この列挙可能な場所で特別な日付を削除します。
  • その後、MyEnumerable.Count()を返します

私はこのコードが付属しています:

return (p) => Enumerable
                  .Range(1, 4)
                  .Where(a => a != 20120101)  
                  .AsQueryable()
                  .Count()

私は(例のように)リストとして、クエリ可能なものとしてキャストしようとしましたが、方法はありません!動作しません!私はいつもこのエラーが発生します:

LINQ to Entitiesは、メソッド'System.Collections.Generic.IEnumerable`1 [System.Int32] Range(Int32、Int32)'メソッドを認識せず、このメソッドをストア式に変換できません。

あなたはそれについて考えを持っていますか?もちろん、列挙可能なものを使用することは必須ではありません。実用的なソリューションはどれも良いです^^

よろしくお願いします!

私の質問を単純化するために、これは機能しません、そして私はしたいです。

(
  from foo in User 
  select new 
  { 
    a = Enumerable.Range(1,4).Count() 
  }
).Take(1)

詳細情報:-)

私がこれを行う場合(変数内の列挙可能なものを外部化する):

var foo = Enumerable.Range(1, 4);
return (p) => foo.Where(a => a != 20110101).Count();

今回は機能しますが、このメソッドで範囲の開始と終了を定義することはできません!

4

1 に答える 1

1

以下のコードは実際のDateTime範囲を生成するため、うるう年、さまざまな月末などを正しく処理します。また、nullまたは空であるdaysToExcludeを正しく処理します。

DateTime baseDate = DateTime.Now;
DateTime[] daysToExclude = new DateTime[] { new DateTime(2012, 6, 25), new DateTime(2012, 6, 30) } ;
int numberOfDays = baseDate.AddMonths(1).Subtract(baseDate).Days;

int days = Enumerable.Range(0, numberOfDays).Select(day => baseDate.Date.AddDays(day)).Except(daysToExclude ?? Enumerable.Empty<DateTime>()).Count();
于 2012-06-18T18:02:12.173 に答える