从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)
    };

从LINQ到SQL表达式的逻辑方法

您必须分两步完成

  • 从数据库中查询原始数据,并将其实体化
  • 使用您的逻辑进行项目

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);