Sql ASP MVC Lambda表达式还是查询扩展?

Sql ASP MVC Lambda表达式还是查询扩展?,sql,asp.net-mvc,linq,expression,Sql,Asp.net Mvc,Linq,Expression,我使用模型工厂从请求模型中查询相关实体。 结果是来自给定实体的ViewModel 获取数据 var posts=\u postRepo.GetCommunityPosts(Id);//拿到一张可交换的支票 ICollection result=等待ModelFactory.PostFactory(posts、take、skip)//使用ModelFactory创建viewmodel 过程数据 公共异步任务后工厂(IQueryable posts) { return wait posts.选择(

我使用模型工厂从请求模型中查询相关实体。 结果是来自给定实体的ViewModel

获取数据
var posts=\u postRepo.GetCommunityPosts(Id);//拿到一张可交换的支票
ICollection result=等待ModelFactory.PostFactory(posts、take、skip)//使用ModelFactory创建viewmodel
过程数据
公共异步任务后工厂(IQueryable posts)
{
return wait posts.选择(a=>newpostViewModel//viewmodel
{
//简单属性
创造的,创造的,
身体,
Id=a.Id,
//相关视图模型
成员=新成员视图模型
{
//这里有会员相关的资料
//这里有很多属性和相关的视图模型
}
}
}).ToListAsync();
问题 有很多不同的工厂,它们都有“成员”视图模型。这确实是一种糟糕的风格,因为我有大量的代码冗余。是否有方法执行查询中的函数,例如:

public async Task<ICollection<PostViewModel>> PostFactory(IQueryable<TRDPost> posts)
{
 return await posts.Select(a => new PostViewModel //the viewmodel
 {
  // simple properties
  Created = a.Created,
  Body = a.Body,
  Id = a.Id,
  // related viewmodels
  Member = GetMemberViewModel(a) // is this possible?
 }
}).ToListAsync<PostViewModel>();
公共异步任务后工厂(IQueryable posts)
{
return wait posts.选择(a=>newpostViewModel//viewmodel
{
//简单属性
创造的,创造的,
身体,
Id=a.Id,
//相关视图模型
Member=GetMemberViewModel(a)//这可能吗?
}
}).ToListAsync();

我读了很多关于表达的书,但都没有成功。如果你能给我指出正确的方向,那就太好了。

多亏了托马斯·佩特里切克,他说了这句话:

查询将使用的lambda表达式的声明为 很简单,因为它与其他C#lambda没有什么不同 表达。查询更有趣,因为它使用了两个 扩展不同的方法。第一个名为ToExpandable的方法创建 围绕DLINQ表对象的薄型包装器。多亏了这个包装 您可以使用第二个名为Invoke的方法来扩展表达式 类调用lambda表达式,同时使其仍然可行 将查询转换为T-SQL。这是因为当转换为 表达式树中,包装器将替换调用方法的所有引用 通过调用的lambda表达式的表达式树并传递这些 表达式到DLINQ,该表达式能够将扩展的查询转换为 T-SQL

阅读这篇文章一定会有所帮助:

public async Task<ICollection<PostViewModel>> PostFactory(IQueryable<TRDPost> posts)
{
 return await posts.Select(a => new PostViewModel //the viewmodel
 {
  // simple properties
  Created = a.Created,
  Body = a.Body,
  Id = a.Id,
  // related viewmodels
  Member = new MemberViewModel 
   {
     // Member related stuff here
     // a lot of properties and also related viewmodels here
   }
 }
}).ToListAsync<PostViewModel>();
public async Task<ICollection<PostViewModel>> PostFactory(IQueryable<TRDPost> posts)
{
 return await posts.Select(a => new PostViewModel //the viewmodel
 {
  // simple properties
  Created = a.Created,
  Body = a.Body,
  Id = a.Id,
  // related viewmodels
  Member = GetMemberViewModel(a) // is this possible?
 }
}).ToListAsync<PostViewModel>();