可以用Load到客户端的EntityList的数据进行GroupBy统计吗?

xhtmldivcss 2012-07-08 06:51:02
我想根据Load到客户端的EntityList<T>里的数据进行GroupBy操作,但似乎EntityList<T>本身并不支持GroupBy.

当然也可以在服务器端进行this.ObjectContext.XXX.GroupBy,然后把结果Load到客户端。不过统计时我不想再进行服务器访问操作,仅仅根据已经Load进客户端的EntityList<T>的数据进行GroupBy统计,不知道这个可不可行?

...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xhtmldivcss 2012-07-19
  • 打赏
  • 举报
回复

public IEnumerable<Summary> TotalSummary
{
get
{ // this._source为EntityList<T>
if (this._source.Source == null)
return null;
else
return this._source.Source.GroupBy(y => y.Phone.Model)
.Select(z => new Summary { Model = z.Key, Count = z.Count() });
}
}


void OnLoadEmployeesCompleted(LoadOperation<Employee> lo)
{
IsBusy = false;
if (lo.HasError)
{
lo.MarkErrorAsHandled();
MessageBox.Show(lo.Error.Message);
}
else if (!lo.IsCanceled)
{

foreach (var ent in lo.Entities)
{
//如果影响统计结果的属性改变,则RaisePropertyChanged("TotalSummary");
ent.PropertyChanged += (s, e) => { if(e.PropertyName == "PhoneId") RaisePropertyChanged(()=>this.TotalSummary); };
}
this._source.Source = lo.Entities;
if (lo.TotalEntityCount != -1)
{
this._view.SetTotalItemCount(lo.TotalEntityCount);
RaisePropertyChanged(() => this.TotalSummary);
}
}
}
白鸽 2012-07-09
  • 打赏
  • 举报
回复
通过linq 就行啊!?可以用Group by啊
xhtmldivcss 2012-07-09
  • 打赏
  • 举报
回复
谢谢楼上。明细和统计都有用。
另外我发现一个问题,我一直试图在集合类型对象后面点出.GroupBy没成功,原来只要using System.Linq就可以了:-)

我目前修改后的作法是在读取明细的LoadCompleted里

void OnLoadEmployeesCompleted(LoadOperation<Employee> lo)
{
IsBusy = false;
if (lo.HasError)
{
lo.MarkErrorAsHandled();
MessageBox.Show(lo.Error.Message);
}
else if (!lo.IsCanceled)
{
// 设置DomainCollectionView的source部分,即EntityList<Employee>的Source属性。
this._source.Source = lo.Entities;
if (lo.TotalEntityCount != -1)
{
this._view.SetTotalItemCount(lo.TotalEntityCount);

//为表现层统计图控件提供数据
TotalSummary = lo.Entities
.GroupBy(x => x.Phone.Model)
.Select(y => new Summary{ Model = y.Key, Count = y.Count() });

}
}
}

Summary、TotalSummary是Silverlight客户端类。


public class Summary
{
public string Model { get; set; }
public int Count { get; set; }
}

private IEnumerable<Summary> _totalSummary;
// TotalSummary绑定到View中的visifire图表控件上。
public IEnumerable<Summary> TotalSummary
{
get
{
if (_totalSummary == null)
_totalSummary = new List<Summary>();
return _totalSummary;
}
set
{
_totalSummary = value;
RaisePropertyChanged(() => this.TotalSummary);
}
}


不知道还有没有改进办法……




  • 打赏
  • 举报
回复
如果查询出来的明细有用,那么你使用 ToList() 把它保存在一个列表中,然后使用 Linq to object 对这个 List<T> 进行分组统计就行了。但是如果查询出来的明细并没有用,那么最好不要查询明细,而是让服务器直接去进行分组统计,仅仅把统计结果查询到内存中。

8,736

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧