【发布时间】:2014-04-08 18:46:47
【问题描述】:
我对 Entity Framework 6 中的复杂查询相当陌生,所以我有一个与分页相关的问题。
场景如下:我有一个项目,我以自己的形式描述了数据模型,并使用 T4 模板,它生成了适当的实体,高保真更改跟踪伴随实体,一个复杂的动态搜索查询实体,它是用于询问有关关联模型的问题(例如 entity.SearchNameCriterium = "t"; entity.SearchNameType = StringSearchType.StartsWith,围绕此构建的 UI 将为用户提供强大的搜索工具。)
为此,我有一部分是使用分页来下拉组成元素列表的: 当我使用“插入”按钮插入内容时,如果溢出到下一页(每次“x”个项目,在常量中定义——我稍后会将其移至设置)我使用以下代码:
this.context.SaveChanges();
int offset = searchCurItemLstCriteriaSkip - 1;
var queryBase = this.queryCurItemLstFormContainer;
int idFind = newDataContext.Identifier;
while (queryBase.Any())
{
queryBase = queryCurItemLstFormContainer.Skip((++offset) * searchCriteriaCount).Take(searchCriteriaCount);
if (queryBase.Any(k => k.Identifier == idFind))
{
this.searchCurItemLstCriteriaSkip = offset * searchCriteriaCount;
break;
}
}
基本原理是项目将始终在当前页面或当前页面之后的数据库中的某个点输入,因此理论上您可以从当前页面开始并继续前进。
我只是想知道是否有更好的方法来做到这一点,或者这种方法是否有效......?如果有人想知道:组合框用于选择当前项目,因为列表只会浪费空间,您一次只需要一个项目,并且搜索功能在 ComboBox 的下拉列表中同样有效。与此关联的 UI 元素是通过文本模板生成的 XAML。
我只是想确定我了解查询移动到最新页面可能对非常大的数据库产生的影响。
执行 query.Select(k=>k.Identifier).Count() / itemsPerPage 的性能考虑是什么?在这种情况下会更快吗?
洞察力非常受欢迎。
【问题讨论】:
标签: c# wpf entity-framework pagination