我的应用程序必须处理大量数据,通常选择大小约为10000行。为了提高性能,建议仅选择所需的数据。
当我必须进行计算或任何有意义的业务时,我很乐意选择所有数据以便正确地实例化我的模型,所以我可以依赖它的功能。
当只查看数据时(通常在表格中)这不是我想要的,我想将检索到的数据量限制在绝对最小值。
到目前为止,我已经使用以下方法从我的存储库中获取数据(如下所示是在存储库中执行所有魔法的方法:
private IEnumerable<TResult> GetAllProject<TResult>(Expression<Func<T, TResult>> selector, Expression<Func<T, bool>> predicate)
{
SetReadContext();
var query = DataContex.Table<Order>().Where(predicate).Select(selector);
return query.ToList();
}
这样我在调用存储库的方法中有了匿名类型的类型定义,我可以透明地使用那里的类型。
每个控制器都可以准确定义要传递给视图的数据,它非常高效,因为我可以直接影响列排序等,而无需在视图中处理网格控件来为我这样做。我在DataContext上不需要任何LoadOptions,因为它根据选择器计算出来。
现在的问题是,我没有控制传递给我的Repository的选择器。它也可能包含不可翻译的方法调用等。
我的问题是:
答案 0 :(得分:1)
我建议你创建ViewModel,这样你就可以使用一组已知的类,Type Explosion并不是真正的问题,因为你现在正在使用匿名类型,这可能有点难以管理。 / p>
如果您(通常)每个View都有一个ViewModel,那么它会变得非常干净。在某些情况下,你甚至可以共享你的ViewModel,虽然我建议不要使用它,因为其中一个消费者迟早需要更多的数据/字段,而另一个最终需要一个膨胀的ViewModel。