我有一个项目的集合,其中每个项目都有一个“日期”字段(代码如下)。如何处理LINQ中的源数据更改?
我想填补使用LINQ的集合中日期中的任何空白。特别是,我希望得到的序列包含原始序列中第一天和最后一天之间的所有天数。
除此之外,我的结果LINQ查询应该能够处理原始序列的任何修改。那就是我无法提前计算最小和最大日期。
所以我试了下面的代码,但它试图计算序列的最小值和最大值时失败。我正在寻找一个“懒惰”的选择。
感谢您的帮助 康斯坦丁
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace consapp
{
class C
{
public DateTime date;
public int? value;
}
static class Program
{
static IEnumerable<C> dates(DateTime d0, DateTime d1)
{
for (var d = d0; d <= d1; d = d.AddDays(1))
{
yield return new C { date = d };
}
}
static void Main(string[] args)
{
var xs = new ObservableCollection<C>();
var q = from d in dates(xs.Min(y => y.date), xs.Max(y => y.date))
join x in xs on d.date equals x.date into js
from j in js.DefaultIfEmpty()
orderby d.date
select new { date = d.date, value = j != null ? j.value : null };
xs.Add(new C { date = DateTime.Parse("11/10/11") });
xs.Add(new C { date = DateTime.Parse("02/02/11") });
xs.Add(new C { date = DateTime.Parse("11/24/11") });
xs.Add(new C { date = DateTime.Parse("09/09/11") });
xs.Add(new C { date = DateTime.Parse("11/10/11") });
foreach (var x in q)
{
Console.WriteLine(x.date.ToShortDateString());
}
}
}
}
你好konstantin,因为Stackoverflow是一个社区编辑的QnA列表,你应该编辑你的问题标题。或者你对“需要linq帮助”这个问题期待什么样的答案?问候 – Zeemee 2010-11-11 16:08:41
@穆尔穆特:谢谢,希望新的主题行更具体 – akonsu 2010-11-11 16:15:34