【发布时间】:2013-01-23 23:29:27
【问题描述】:
正如标题所说,我将实体框架 4.0 用于金融应用程序。我有一个 winform,其中列出了我拥有的所有检查(检查)。但是在那种形式中,用户可以指定一些过滤器。
如果用户没有应用任何过滤器,我可以这样查询:
lista_cheques = db.Cheque.Include("Operacion").Include("Cliente").ToList();
datagridview.Datasource = lista_cheques;
这很简单。但是当它应用过滤器时,问题就变得更大了。
如您所见,用户可以使用过滤器查看特定客户的支票(支票)、日期、银行、CUIT 编号、支票状态等。
现在,我的问题与查询中的性能有关。
我正在考虑将过滤器分开,如下所示:
lista_cheques = db.Cheque.Include("Operacion").Include("Cliente").Where(x => x.fecha_deposito == fecha).ToList();
lista_cheques = lista_cheques.Where(x => x.banco.id_banco = banco).ToList();
lista_cheques = lista_cheques.Where(x => x.Operacion.Cliente.id_cliente = id_cliente).ToList();
翻译: fecha 是日期 操作是一组检查 客户就是客户。
通过这种方式,我正在执行一个查询,然后从该查询结果中进行一个查询,然后从该新结果中进行一个新查询,然后继续。
我认为这种方式可能存在很大的性能问题。我知道 SQL 服务器优化查询。所以,如果我在做碎片查询,优化器就不能正常工作。
我想过但非常乏味的另一种方法是创建一个大查询来处理所有可能的过滤器选择。
例如,另一个例子是这样的:
lista_cheques = db.Cheque.Include("Operacion").Include("Cliente").Where(x => x.fecha_deposito == fecha && x.banco.id_banco = banco && x.Operacion.Cliente.id_cliente = id_cliente).ToList();
最大的问题是我需要很多组合才能处理所有过滤器可能性。
好的,伙计们,现在,我会在第一个代码示例中遇到性能问题吗?我在那里对数据库进行了一次大查询,然后在对象列表中进行查询(我认为这会更快)。我对这个 ORM 很陌生,这个清单将不得不处理很多注册表..
有人可以给我一些建议吗?解释的有点乱,希望你能理解..
【问题讨论】:
-
我认为这种方式可能会有很大的性能问题 - 不要思考,衡量。首先查看生成的实际 SQL。我希望这能正常工作。
标签: c# winforms performance entity-framework-4