tob*_*ias 2 .net c# entity-framework entity-framework-4
我可以让我的EF对象只检索执行的sql中的特定列吗?
如果我有一个包含大量数据的列真的会降低查询速度,那么如何让我的对象从生成的sql中排除该列?
如果我的表有Id(int),Name(int),Data(blob),我该如何进行查询
select Id, Name from TableName
Run Code Online (Sandbox Code Playgroud)
代替
select Id, Name, Data from TableName
Run Code Online (Sandbox Code Playgroud)
根据下面的建议,我的方法是
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();
}
Run Code Online (Sandbox Code Playgroud)
我这样称呼它
List<CampaignWorkType> list = GetBy<CampaignWorkType>(dbContext, c => c.Active == true, n => new { n.Id, n.Name });
Run Code Online (Sandbox Code Playgroud)
我收到如下错误.
无法将类型'AnonymousType#1'隐式转换为'Domain.Campaign.CampaignWorkType'
我怎么能解决这个问题?
解决方案是:
首先,定义代理类型:
public class CampaignWorkTypesSimpleList
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后更改这样的泛型方法:
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();
}
Run Code Online (Sandbox Code Playgroud)
最后,执行它.
List<CampaignWorkTypesSimpleList> list = this.GetBy<CampaignWorkType, CampaignWorkTypesSimpleList>(dbContext, c => c.Active == true, n => new CampaignWorkTypesSimpleList { Id = n.Id, Name = n.Name });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4046 次 |
| 最近记录: |