在我的应用程序中,我必须显示一些关于客户的信息(客户有代码和名称)。其中一个字段是“显示名称”,其中查询中的LinqToSql自定义函数的执行成本
DisplayName = Code + " - " + Name
我从数据库中检索客户到视图模型,并设置显示名称,像这样:
from customer in this.Context.Customers
select new CustomerViewModel
{
DisplayName = customer.Code + " - " + customer.Name
}
但我想提取此逻辑转换为表达式或函数,因为我在多个地方使用它,并且如果逻辑改变(例如DisplayName = Name),那么我必须做很多更改。
因此,我创造了这个功能
Func<Customer, string> CustomerDisplayName = (c => c.Code + " - " + c.Name)
,并使用这种方式:
from customer in this.Context.Customers
select new CustomerViewModel
{
DisplayName = CustomerDisplayName(customer)
}
它工作正常,使逻辑可重复使用的,但问题是该函数无法解析到一个SQL语句中,所以LinqToSql首先检索数据('Code'和Name'),然后为每条记录执行该函数。
我应该担心性能(如果我有很多数据),并坚持第一个选项?或者可以使用该功能吗?
第一个语句是否会生成一个好的查询?第二个产生两个查询吗? – TheBoyan 2011-12-22 09:47:58
“很多数据的含义”是什么:超过一百万?无论如何,猜猜你不想同时显示它们,所以我不认为你需要担心,除非你得到N + 1个查询(配置你的sql来确认) – Pleun 2011-12-22 09:50:42
@Bojan:都会生成一个查询,并且在我的意见都是'好',但第二个必须做一些额外的工作后,从服务器上检索到的数据 – SzilardD 2011-12-22 17:06:26