C# 使用实体框架和WebApi计算属性
如何正确处理EF模型中的计算属性 由于“无法在LINQ to Entities查询中构造实体或复杂类型‘Invoice’,我的下面的try-bellow将失败。” 将方法“GetInvoice”视为具有允许查询字符串的WebApi方法C# 使用实体框架和WebApi计算属性,c#,entity-framework,asp.net-web-api,entity-framework-6,C#,Entity Framework,Asp.net Web Api,Entity Framework 6,如何正确处理EF模型中的计算属性 由于“无法在LINQ to Entities查询中构造实体或复杂类型‘Invoice’,我的下面的try-bellow将失败。” 将方法“GetInvoice”视为具有允许查询字符串的WebApi方法 static void Main(string[] args) { var invs = GetInvoice(); invs.FirstOrDefault(); } public static IQueryable<I
static void Main(string[] args)
{
var invs = GetInvoice();
invs.FirstOrDefault();
}
public static IQueryable<Invoice> GetInvoice()
{
var model = new Model();
IQueryable<Invoice> inv = model.Invocies.Include(t => t.Items).SelectInvoiceData();
return inv;
}
public static class ExtHelper
{
public static IQueryable<Invoice> SelectInvoiceData(this IQueryable<Invoice> item)
{
return item.Select(c => new Invoice
{
LatestItemName = c.Items.FirstOrDefault().Name
});
}
}
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreatedAt { get; set; }
}
public class Invoice
{
public int Id { get; set; }
public DateTime CreatedAt { get; set; }
public string Issuer { get; set; }
[NotMapped]
public string LatestItemName { get; set; }
private ICollection<Item> _items;
public virtual ICollection<Item> Items
{
get { return _items ?? (_items = new Collection<Item>()); }
set { _items = value; }
}
}
static void Main(字符串[]args)
{
var invs=GetInvoice();
invs.FirstOrDefault();
}
公共静态IQueryable GetInvoice()
{
var模型=新模型();
IQueryable inv=model.invoices.Include(t=>t.Items)。选择InvoiceData();
退货库存;
}
公共静态类ExtHelper
{
公共静态IQueryable SelectInvoiceData(此IQueryable项)
{
退货项目。选择(c=>新发票
{
LatestItemName=c.Items.FirstOrDefault().Name
});
}
}
公共类项目
{
公共int Id{get;set;}
公共字符串名称{get;set;}
public DateTime CreatedAt{get;set;}
}
公共类发票
{
公共int Id{get;set;}
public DateTime CreatedAt{get;set;}
公共字符串颁发者{get;set;}
[未映射]
公共字符串LatestItemName{get;set;}
私人ICollection项目;
公共虚拟ICollection项目
{
获取{return\u items???(\u items=new Collection());}
设置{u items=value;}
}
}
EntityFramework 6不支持创建这样的部分实体。或者使用匿名类型:
return item.Select(c => new
{
LatestItemName = c.Items.FirstOrDefault().Name
});
或不属于上下文的某些DTO类:
return item.Select(c => new InvoiceDTO
{
LatestItemName = c.Items.FirstOrDefault().Name
});
但是,在EF Core中,可以像您的示例中那样创建实体