日期:2014-05-20  浏览次数:20760 次

Code Firtst 如何设置默认查询条件
我的所以业务实体中都有一个属性OrgCode(机构代码),我想在所有基于实体框架查询时,不用显式加入对这个字段的查询条件,而是由框架自动实现,可不可以实现?
如:

using (DBContext context = new DBContext())
{
     return context.Roles.Where(r => r.OrgCode == orgCode).ToList();
}

我无需写关于OrgCode的条件:

using (DBContext context = new DBContext())
{
     return context.Roles.ToList();
}

就能实现上面的等效查询

------解决方案--------------------
你的查询条件是如何传递的呢?
如果查询条件存在QueryString中可以参考下面的代码:
public static class EntitiesFilterHelper
{
public static IEnumerable<T> AutoFilter<T>(this IEnumerable<T> entities)
{
HttpContext context = HttpContext.Current;
if (context == null)
throw new InvalidOperationException();

NameValueCollection queryString = context.Request.QueryString;
string[] queryKeys = queryString.AllKeys;
foreach (string key in queryKeys)
{
PropertyInfo property = typeof(T).GetProperty(key, BindingFlags.Public 
------解决方案--------------------
 BindingFlags.Instance);
if (property == null)
continue;
entities = entities.Where(e =>
{
return property.GetValue(e, null).ToString() == queryString[key];
});
}

return entities;
}
}

可以按下面的方法调用:
return context.Roles.ToList().AutoFilter();
以上代码仅代表一种思路,所以仅供参考。