Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
发生NotSupportedException LINQ to Entities无法识别方法ToList_Linq_Entity Framework_Linq To Entities - Fatal编程技术网

发生NotSupportedException LINQ to Entities无法识别方法ToList

发生NotSupportedException LINQ to Entities无法识别方法ToList,linq,entity-framework,linq-to-entities,Linq,Entity Framework,Linq To Entities,我正在开发一个ASP.NET MVC 4.5应用程序,该应用程序带有一个WCF后端,其中entity framework 5用作数据访问。 PictureUse是实体,PictureUsageContract是通过WCF传输的数据协定 GetAll是一个标准的通用get all,用于从对象上下文中获取实体 var allPictureUses = _pictureUseRepository.GetAll() .Where(x => x.Name != nul

我正在开发一个ASP.NET MVC 4.5应用程序,该应用程序带有一个WCF后端,其中entity framework 5用作数据访问。 PictureUse是实体,PictureUsageContract是通过WCF传输的数据协定

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是一个列表图片,Use是一个实体

我事先搜索了一下,知道可能是这样。LINQtoEntities不支持Select,但我还没有找到任何具体的解决方案


欢迎提供任何帮助。

如果您收到一个错误,说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),那么您可能必须在将其转换为列表之前将详细信息检索到匿名对象列表中

乙二醇


如果您得到一个错误,说LINQtoEntities不支持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),那么您可能必须在将其转换为列表之前将详细信息检索到匿名对象列表中

乙二醇

试一试

试一试


感谢您的回答,但PictureUse1给出的是pictureUse对象列表,而不是我需要的字符串列表(所述pictureUse的属性)。感谢您的回答,但PictureUse1给出的是pictureUse对象列表,而不是字符串列表(所述pictureUse的属性)这是我需要的。在这种情况下,停止它缓冲所有数据调用。AsEnumerable()而不是.ToArray()会更好。在这种情况下,停止它缓冲所有数据调用。AsEnumerable()而不是.ToArray()会更好。
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();