Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将实体框架模型中的方法转换为表达式?_C#_Entity Framework_Linq_Linq To Sql - Fatal编程技术网

C# 如何将实体框架模型中的方法转换为表达式?

C# 如何将实体框架模型中的方法转换为表达式?,c#,entity-framework,linq,linq-to-sql,C#,Entity Framework,Linq,Linq To Sql,因此,我的具体示例如下:我有一个名为Asset的模型 public class Asset { public Asset() { Transactions = new HashSet<Transaction>(); } public int Id { get; set; } public string Tag { get; set; } public virtual ICollection<Transactio

因此,我的具体示例如下:我有一个名为Asset的模型

public class Asset
{
    public Asset()
    {
        Transactions = new HashSet<Transaction>();
    }

    public int Id { get; set; }
    public string Tag { get; set; }

    public virtual ICollection<Transaction> Transactions { get; set; }    

    public Transaction CurrentTransaction => Transactions.OrderByDescending(t => t.Created).FirstOrDefault();
}
公共类资产
{
公共资产()
{
事务=新的HashSet();
}
公共int Id{get;set;}
公共字符串标记{get;set;}
公共虚拟ICollection事务{get;set;}
公共事务CurrentTransaction=>Transactions.OrderByDescending(t=>t.Created).FirstOrDefault();
}
我要做的是将CurrentTransaction()方法转换成运行更快的方法,当我需要获取所有资产的列表以及每个资产的当前事务时,不需要将其拉入内存(如在compile to SQL中)


我真的对表达式或函数一无所知,我觉得这已经做了很多次了,我就是找不到合适的词来搜索。

因为
Asset.Transactions
是一个导航属性,访问它总是会导致EF将整个集合加载到内存中(
IQueryable
导航属性不受支持)和其他调用(如
OrderByDescending()
)将由Linq-to-Objects处理。您能建议一些可能使我的数据结构响应更快的方法吗?基本上,我想提取一个包含所有资产的表(可能有10万个)和每个的最新事务。因此,使用CurrentTransaction作为属性进行选择将对数据库进行数千次调用。尝试从EF上下文投影到另一种类型。类似于:
context.Assets.select(x=>new{Asset=x,CurrentTransaction=x.Transactions.OrderByDescending(t=>t.Created)。FirstOrDefault()});
(您可能希望将
new{…}
替换为
new YourResultType{…}
),因为
Asset.Transactions
是一个导航属性,访问它将始终导致EF将整个集合加载到内存中(
IQueryable
导航属性不受支持)并进一步调用(如
OrderByDescending()
)将由Linq-to-Objects处理。您能建议一些可能使我的数据结构响应更快的方法吗?基本上,我想提取一个包含所有资产(可能是10万个)的表和每个的最新事务。因此,使用CurrentTransaction作为属性进行选择将对数据库进行数千次调用。尝试从EF上下文投影到另一种类型。类似于:
context.Assets.select(x=>new{Asset=x,CurrentTransaction=x.Transactions.OrderByDescending(t=>t.Created)。FirstOrDefault()});
(您可能希望将
new{…}
替换为
newYourResultType{…}