c# - 解决 LINQ to Entities 无法识别该方法的方法?

标签 c# entity-framework iqueryable

我有一个针对 IEnumerable 一直使用的方法,没问题。不过我也想开始对 IQueryable 使用它。但是,我目前的方式不起作用,因为它试图针对数据库执行我的方法。

情况如下。如果选择的值为 null,或者属性的 ID 和名称(如果存在),我希望我选择的对象上的属性为 null。例如:

var foos = FooRepository.All().Select(s => new FooBrief()
{
    Id = s.Id,
    Customer = SimpleData.To(s.Customer, m => m.Id, m => m.Name)
});

其中 SimpleData.To 看起来像:

public class SimpleData
{
    public int Id { get; set; }
    public string Name { get; set; }

    public static SimpleData To<T>(T t, Func<T, int> id, Func<T, string> name) where T : class
    {
        if (t != null)
        {
            return new SimpleData { Id = id(t), Name = name(t) };
        }
        return null;
    }
}

有什么办法可以让我获得这种行为,同时允许它针对数据库执行吗?

注意:由于代码中其他地方的原因,我无法使用 .ToList()。我稍后可能会添加额外的过滤

最佳答案

最简单的方法是使用 AsEnumerable 在数据库外部执行选择:

var foos = FooRepository.All()
                        .Select(x => new { Id = x.Id,
                                           CustomerId = x.Customer.Id,
                                           CustomerName = x.Name })
                        .AsEnumerable()
                        .Select(s => new FooBrief {
                                   Id = s.Id,
                                   Customer = new SimpleData { 
                                       Id = s.CustomerId,
                                       Name = s.CustomerName
                                   }
                                });

第一个Select只是为了确保数据库查询只提取所需的字段。如果您确实仍想使用 SimpleData.To 方法:

// Outdented to avoid scrolling
var foos = FooRepository.All()
    .Select(x => new { Id = x.Id,
                       CustomerId = x.Customer.Id,
                       CustomerName = x.Name })
    .AsEnumerable()
    .Select(s => new FooBrief {
               Id = s.Id,
               Customer = SimpleData.To(s,
                                        s => s.CustomerId,
                                        s => s.CustomerName)
            });

关于c# - 解决 LINQ to Entities 无法识别该方法的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17216542/

相关文章:

c# - INotifyPropertyChanged 困惑

c# - MDI 父背景图像

c# - 在类上调用方法或作为参数传递给另一个类? C#

c# - 无法将 IQueryable<> 转换为 IOrderedQueryable 错误

c# - 从 MVC 4 中的 View 列表到 Controller 缺少值?

c# - 使用 Entity Framework、LINQ 进行预加载

c# - 使用继承时复制外键

c# - 将存储库公开为 IQueryable

c# - 从 where 子句或 IQueryable/IEnumerable 获取 lambda 表达式

c# - 什么是防止多次执行同一迁移的 Entity Framework 机制?