2

EFオブジェクトに実行されたSQLの特定の列のみを取得させることはできますか?

クエリを実際に遅くする大量のデータを含む列がある場合、生成されたSQLからその列をオブジェクトから除外するにはどうすればよいですか?

テーブルにId(int)、Name(int)、Data(blob)がある場合、クエリを次のようにするにはどうすればよいですか?

select Id, Name from TableName

それ以外の

select Id, Name, Data from TableName

以下の提案から、私の方法は

 public List<T> GetBy<T>(DbContext context,Expression<Func<T, bool>> exp, Expression<Func<T,T>> columns) where T : class
    {

        return dbContext.Set<T>().Where(exp).Select<T,T>(columns).ToList();
    }

そして、私はそれをそのように呼んでいます

List<CampaignWorkType> list = GetBy<CampaignWorkType>(dbContext, c => c.Active == true, n => new { n.Id, n.Name });

以下のようなエラーが発生しました。

タイプ「AnonymousType#1」を「Domain.Campaign.CampaignWorkType」に暗黙的に変換することはできません

どうすればこれを解決できますか?

4

2 に答える 2

9

解決策は次のとおりです。

まず、代理型を定義します。

public class CampaignWorkTypesSimpleList
{
   public int Id { get; set; }
   public string Name { get; set; }
}

次に、ジェネリック メソッドを次のように変更します。

public List<U> GetBy<T,U>(DbContext context,Expression<Func<T, bool>> exp, Expression<Func<T,U>> columns) 
                where T : class
                where U : class
{

  return dbContext.Set<T>().Where(exp).Select<T, U>(columns).ToList();
}

最後に、それを実行します。

List<CampaignWorkTypesSimpleList> list = this.GetBy<CampaignWorkType, CampaignWorkTypesSimpleList>(dbContext, c => c.Active == true, n => new CampaignWorkTypesSimpleList { Id = n.Id, Name = n.Name });
于 2012-05-17T22:52:38.533 に答える
-2

EFデザイナを使用している場合は、エンティティモデルデザインサーフェスを使用して、エンティティモデルから[データ]列を削除します。

于 2012-05-17T03:24:16.940 に答える