ですから、例えばプログラム:式に依存するlinq投影の繰り返しを避ける方法はありますか?
class Cat
{
public bool IsMale { get; set;}
public int TailLength { get; set; }
public string Name { get; set; }
public decimal ClawAttackFrequency { get; set; }
public List<DateTime> FeedingTimes { get; set; }
}
static void Main(string[] args)
{
var cats = new List<Cat>();
var someData = cats
.Select(x => new
{
x.Name,
x.IsMale,
LatestFeedingTime = x.FeedingTimes.Max(y => (DateTime?)y)
})
.Select(x => new
{
x.Name,
x.IsMale,
x.LatestFeedingTime,
WasFedRecently = x.LatestFeedingTime.HasValue && x.LatestFeedingTime.Value >= DateTime.Today.AddDays(-1)
});
}
これは何もしませんが、それはLatestFeedingTimeための表現を複製することを避けるために、私が代わりに二つの突起を作成し、複製しなければならないことである私の問題を説明するだけのおもちゃのプログラムであり、プロパティの束。
var someData = cats
.Select(x => new
{
x.Name,
x.IsMale,
LatestFeedingTime = x.FeedingTimes.Max(y => (DateTime?)y),
WasFedRecently = (x.FeedingTimes.Max(y => (DateTime?)y)).HasValue && (x.FeedingTimes.Max(y => (DateTime?)y)).Value >= DateTime.Today.AddDays(-1)
});
しかし、これではなく、トリッキーな表現を複製:
代替がされていると思います。
C#で両方の世界を最大限に活用する方法はありますか?式を宣言してから同じ投影法で2回使用するようにしますか?
私は私の例をあまり単純化したいくつかの答えの後に見る。本当の問題はlinqがentiteに関連しています。誰かが実際にこれを疑問に思って、より良い質問を投稿する場合には、回答の1つを受け入れます。 – alun