从LINQ到SQL表达式的逻辑方法
本文关键字:方法 表达式 LINQ SQL | 更新日期: 2023-09-27 17:58:44
以下场景的最佳实践是什么:
我有一个LINQ到SQL表达式,在它的投影中,我想调用一个私有方法。我知道我的方法不能转换成SQL,但我确实需要逻辑。在获得查询结果后更改属性是不可能的,因为您无法更改投影属性(它是只读的)。
10倍
var projectedOrders = from order in orders
select new
{
orderId = order.Id,
orderName = order.FriendlyName,
OrderDate = order.OrderDate,
CustomerName = helper.GetUserNameByUserId(order.UserId)
};
您必须分两步完成
- 从数据库中查询原始数据,并将其实体化
- 使用您的逻辑进行项目
var projectedOrders = (from order in orders
select new
{
orderId = order.Id,
orderName = order.FriendlyName,
OrderDate = order.OrderDate,
UserId= order.UserId
})
.ToArray()
.Select(o =>
new{
o.orderId,
o.orderName,
o.OrderDate,
CustomerName = helper.GetUserNameByUserId(o.UserId)
});
您可以将UserId
临时存储到属性中,并将CustomerNames
设置为null,然后在查询后使用循环并更改CustomerNames:的值
var projectedOrders = (from order in orders
select new
{
orderId = order.Id,
orderName = order.FriendlyName,
OrderDate = order.OrderDate,
UserId = order.UserId,
CustomerName = null
}).ToList();
foreach(var order in projectedOrders)
order.CustomerName = helper.GetUserNameByUserId(order.UserId);