var query = from r in data.AsEnumerable()
select new Test
{
Name = r.Field<string>(0),
DateReported = r.Field<DateTime>(2)
};
var newQuery = from i in query
orderby i.Name, i.DateReported
select i;
myData.DataContext = newQuery;
所以问题是,我正在阅读Excel工作表并迭代值。如果我使用查询将DataContext绑定到DataGrid,那么一切正常。但是当我将它绑定到newQuery时,每个Item都会输出两次
答案 0 :(得分:0)
AsEnumerable()看起来很可疑;它可能有副作用,当它被执行两次时会导致重复。
我承认我不会立即看到会发生什么;从表面上看,您会认为select new Test{...}
会强制立即进行评估,后续查询只会对结果起作用。但是当有人试图让他们的类型变得聪明时,我看到了一些奇怪的事情......
data
是什么类型的?
答案 1 :(得分:0)
尝试在Test类中覆盖Equal:
public class Test
{
public string Name { get; set; }
public DateTime DateReported { get; set; }
public override bool Equals(object obj)
{
Test test = obj as Test;
if (test == null )
return false;
return string.Equals(this.Name, test.Name) && this.DateReported == test.DateReported;
}
public override int GetHashCode()
{
return Name.GetHashCode() ^ DateReported.GetHashCode();
}
}
答案 2 :(得分:0)
你直接试过这个吗?
var query = from r in data.AsEnumerable()
orderby r.Field<string>(0), r.Field<DateTime>(2)
select new Test
{
Name = r.Field<string>(0),
DateReported = r.Field<DateTime>(2)
};
并检查结果? 另外在我看来你没有把实际的代码,你只是用示例代码演示。它可能来自实际代码。
等待你的回复。 问候。