所以示例程序:有没有办法避免依赖于表达式的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#中获得两全其美的好处。就像一种声明表达式的方法,然后在相同的投影中使用两次?
我现在看到几个答案后,我过分简化了我的例子。真正的问题更多地与linq相关。我会接受其中一个答案,以防有人真的想知道这个问题,也许会提出一个更好的问题。 – alun