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 设计器,请使用实体模型设计图面从实体模型中删除 [Data] 列。

于 2012-05-17T03:24:16.940 回答