我正在使用带有WCF后端的ASP.NET MVC 4.5应用程序,其中实体框架5用作数据访问。 PictureUse是实体,PictureUsageContract是通过WCF传输的DataContract。
Repository.GetAll是一个标准的泛型get all,可以从对象上下文中获取实体。
var allPictureUses = _pictureUseRepository.GetAll()
.Where(x => x.Name != null)
.Include(x => x.PictureUse1)
.Select(x => new PictureUsageContract()
{
ID = x.ID,
DefaultPrice = x.DefaultPrice,
Name = x.Name,
UseDescription = x.UseDescription,
SubItemList = x.PictureUse1.Select(c => c.UseDescription).ToList()
}).ToList();
调试时收到异常:{“LINQ to Entities无法识别方法'System.Collections.Generic.List 1[System.String] ToList[String](System.Collections.Generic.IEnumerable
1 [System.String])'方法,并且此方法无法转换为商店表达。“}
我知道这是以下一行:
SubItemList = x.PictureUse1.Select(c => c.UseDescription).ToList()
SubItemList是List PictureUse是一个实体。
我事先搜索了一下,知道它可能是那样。但LINQ to Entities没有正确支持选择,但我没有找到解决这个问题的具体方法。
欢迎任何帮助。
答案 0 :(得分:1)
尝试
var allPictureUses = _pictureUseRepository.GetAll()
.Where(x => x.Name != null)
.Include(x => x.PictureUse1)
.ToArray()
.Select(x => new PictureUsageContract()
{
ID = x.ID,
DefaultPrice = x.DefaultPrice,
Name = x.Name,
UseDescription = x.UseDescription,
SubItemList = x.PictureUse1.Select(c => c.UseDescription).ToList()
}).ToList();
答案 1 :(得分:0)
如果您收到错误消息称Linq To Entities不支持ToList,那么显而易见的事情就是将其删除。
所以我会尝试
var allPictureUses = _pictureUseRepository.GetAll()
.Where(x => x.Name != null)
.Include(x => x.PictureUse1)
.Select(x => new PictureUsageContract()
{
ID = x.ID,
DefaultPrice = x.DefaultPrice,
Name = x.Name,
UseDescription = x.UseDescription,
SubItemList = x.PictureUse1.Select(c => c.UseDescription)
}).ToList();
如果这不起作用(例如,它可能不允许您分配给SubItemList),那么在将它们转换为List之前,您可能必须将详细信息检索到匿名对象列表中
例如
var allPictureUses = _pictureUseRepository.GetAll()
.Where(x => x.Name != null)
.Include(x => x.PictureUse1)
.Select(x => new
{
ID = x.ID,
DefaultPrice = x.DefaultPrice,
Name = x.Name,
UseDescription = x.UseDescription,
SubItemList = x.PictureUse1.Select(c => c.UseDescription)
}).ToList()
.Select(x => new PictureUsageContract()
{
ID = x.ID,
DefaultPrice = x.DefaultPrice,
Name = x.Name,
UseDescription = x.UseDescription,
SubItemList = x.SubItemList.ToList()
}).ToList();