1

エンティティ フレームワーク 5 がデータ アクセスとして使用される WCF バックエンドを備えた ASP.NET MVC 4.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.IEnumerable1[System.String])' メソッドを認識せず、このメソッドはストア式に変換できません。"}

それを行ったのは次の行であることはわかっています。

  SubItemList = x.PictureUse1.Select(c => c.UseDescription).ToList()  

SubItemList はリスト PictureUse はエンティティです。

事前に少し検索したところ、.Select が LINQ to Entities で適切にサポートされていない可能性があることがわかりましたが、この問題に対する具体的な解決策は見つかりませんでした。

どんな助けでも大歓迎です。

4

2 に答える 2

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();
于 2012-11-12T16:56:03.653 に答える
0

Linq To Entities が ToList をサポートしていないというエラーが表示された場合は、明らかに 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 に割り当てることができない場合など) は、匿名オブジェクトのリストに詳細を取得してから、リストに変換する必要があります。

例えば

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();
于 2012-11-12T16:45:15.453 に答える