C# MVC LINQ to实体无法识别方法调用函数-何时调用函数?

C# MVC LINQ to实体无法识别方法调用函数-何时调用函数?,c#,entity-framework,linq-to-entities,C#,Entity Framework,Linq To Entities,我试图在LINQ语句中调用一个函数,显然它无法转换为SQL。这是我的代码,我正在尝试将datetime转换为周数。最好的方法是什么?在更新ViewModel之后是否循环遍历数据 控制器 public ActionResult Listings(string categoryName) { HomeServices service = new HomeServices(); return View(service.GetListingsViewModel(categoryName

我试图在LINQ语句中调用一个函数,显然它无法转换为SQL。这是我的代码,我正在尝试将datetime转换为周数。最好的方法是什么?在更新ViewModel之后是否循环遍历数据

控制器

public ActionResult Listings(string categoryName)
{
    HomeServices service = new HomeServices();

    return View(service.GetListingsViewModel(categoryName);
}
查看模型

public class ResultsViewModel
{
    public System.Guid AdGuid { get; set; }
    public Nullable<System.DateTime> ListDate { get; set; }
    public string ListingAge { get; set; }
    public string Image1 { get; set; }

}
public class ListingsViewModel
{
    public IEnumerable<ResultsViewModel> ResultsVM { get; set; }
    public int TotalCount { get; set; }
}

首先,下载所需的数据。然后,在本地将其处理为需求

var listings = Listings
  .Where(x => x.Category == categoryName)
  .Select(x => new 
  {
    AdGuid = x.AdGuid,
    ListDate = x.ListDate,
    Image1 = x.ListingImage.Image1
  })
  .AsEnumerable() // make call to DB
  .Select(x => new ResultsViewModel
  {
    AdGuid = x.AdGuid,
    ListDate = x.ListDate,
    ListingAge = Logic.App.GetListingAge(x.BirthDate ?? DateTime.Now),
    Image1 = x.Image1
  })
  .ToList();  //Materialize the local query into a real list.
我强烈建议您在这些调用结束时始终
.ToList()
。其他对该方法的多次调用将返回完全不同的
ResultsViewModel
列表


.

首先,下载所需数据。然后,在本地将其处理为需求

var listings = Listings
  .Where(x => x.Category == categoryName)
  .Select(x => new 
  {
    AdGuid = x.AdGuid,
    ListDate = x.ListDate,
    Image1 = x.ListingImage.Image1
  })
  .AsEnumerable() // make call to DB
  .Select(x => new ResultsViewModel
  {
    AdGuid = x.AdGuid,
    ListDate = x.ListDate,
    ListingAge = Logic.App.GetListingAge(x.BirthDate ?? DateTime.Now),
    Image1 = x.Image1
  })
  .ToList();  //Materialize the local query into a real list.
我强烈建议您在这些调用结束时始终
.ToList()
。其他对该方法的多次调用将返回完全不同的
ResultsViewModel
列表

我试图调用一个在SQL中显然无法调用的方法

你确定吗?使用最新版本的SQL,您可以告诉EF调用数据库中的用户定义函数,而不是调用C#函数调用

您想用
DbFunction
注释函数

我试图调用一个在SQL中显然无法调用的方法

你确定吗?使用最新版本的SQL,您可以告诉EF调用数据库中的用户定义函数,而不是调用C#函数调用


您想使用
DbFunction

对函数进行注释。Count()在转换为.ToList()后是否可以执行,因为它不会进行另一个SQL调用?为什么模型属性不是
public int TotalCount{get{return ResultsVM.Count();}}
?封装逻辑将保留属性逻辑。抱歉,这是不完整的代码。我内置了分页功能,需要返回所有记录的总数,同时只返回基于当前页面的子集。这是一个完全不同的问题。它已经被多次询问和回答了。因为记录的数量与解析模型完全无关,所以我将把它作为一个单独的方法。调用Count是一种超级优化,可以自己执行。答案不是完全不同的问题是肯定的,您可以在上面的代码执行后执行.Count()。Count()是否可以在转换为.ToList()后执行,既然它不会进行另一个SQL调用,为什么模型属性不能是
public inttotalcount{get{return ResultsVM.Count();}}
?封装逻辑将保留属性逻辑。抱歉,这是不完整的代码。我内置了分页功能,需要返回所有记录的总数,同时只返回基于当前页面的子集。这是一个完全不同的问题。它已经被多次询问和回答了。因为记录的数量与解析模型完全无关,所以我将把它作为一个单独的方法。调用Count是一种超级优化的方法,可以自己执行。答案是肯定的,您可以在上述代码执行后执行.Count()。我很确定SQL server中不存在
GetListingAge()
。当然可以复制它。您可以像我说的那样创建一个UDF,也可以在SQL server中使用.net来实现它。我非常确定
GetListingAge()
在SQL server中不存在。复制它当然是可能的。您可以像我说的那样创建一个UDF,也可以在SQL server中使用.net来实现它。
var listings = Listings
  .Where(x => x.Category == categoryName)
  .Select(x => new 
  {
    AdGuid = x.AdGuid,
    ListDate = x.ListDate,
    Image1 = x.ListingImage.Image1
  })
  .AsEnumerable() // make call to DB
  .Select(x => new ResultsViewModel
  {
    AdGuid = x.AdGuid,
    ListDate = x.ListDate,
    ListingAge = Logic.App.GetListingAge(x.BirthDate ?? DateTime.Now),
    Image1 = x.Image1
  })
  .ToList();  //Materialize the local query into a real list.