0

エンティティフレームワークを使用していて、問題を抱えている人。

データを取得するとき、モデルクラスの戻り値の型を使用しないので、クラスとエンティティフレームワークを作成した人は、以下のようにクラスの型を返します:

List<MixedArticle> lstMxa=new List<MixedArticle>();

 Model.BlogDBEntities bdbe = new Model.BlogDBEntities();
                SqlParameter sp = new SqlParameter("@count", count);
                object[] parameters = new object[1] { sp };

                lstMxa = bdbe.Database.SqlQuery<Facade.MixedArticle>("select * from fn_GetLastXArticles(@count)", parameters).ToList();

しかし、私は toList メソッドを次のように使用できます

lstMxa=bdbe.Articles...where(x=x.Count==count).ToList<Facade.MixedArticle>();

この方法を試してみると、Visual Studio は拒否し、TSource ではないと言います。

では、ToList() メソッドを使用するにはどうすればよいですか?

4

1 に答える 1

2

データベース内のテーブルから持っているプロパティを選択するプロジェクションを使用できます。MixedArticleArticles

lstMxa = bdbe.Articles
    .Where(x => x.Count == count)
    .Select(x => new Facade.MixedArticle
    {
        SomePropertyInMixedArticle1 = x.SomeProperty1,
        SomePropertyInMixedArticle2 = x.SomeProperty2,
        // etc.
    })
    .ToList();

Articleデータベースから完全なエンティティをロードし、必要なプロパティをマップすることもできますMixedArticle(たとえば、AutoMapperなどのツールを使用)。ただし、射影の利点は、Select実際に必要な数よりも多くの列値をデータベースからロードしないことです。MixedArticleただし、式でこれらすべてのプロパティを手動でリストして割り当てる必要がありSelectます。

于 2013-09-04T19:13:24.827 に答える