如何将sql附加到实体框架查询
如何将原始sql(如条件)附加到实体框架linq查询如何将sql附加到实体框架查询,sql,entity-framework,linq-to-entities,Sql,Entity Framework,Linq To Entities,如何将原始sql(如条件)附加到实体框架linq查询 我愿意接受所有建议,因此不必将其附加到linq查询中。要点是通过添加一些自定义sql来过滤整个查询。使用IQueryable,我们可以将linq上的条件附加到实体查询中 private IQueryable<Customer> FilterList(IQueryable<Customer> customer, List<string> filter, string filterValue)
我愿意接受所有建议,因此不必将其附加到linq查询中。要点是通过添加一些自定义sql来过滤整个查询。使用IQueryable,我们可以将linq上的条件附加到实体查询中
private IQueryable<Customer> FilterList(IQueryable<Customer> customer, List<string> filter, string filterValue)
{
IQueryable<Customer> query = new List<Customer>().AsQueryable();
if (filter == null || string.IsNullOrEmpty(filterValue))
{
return customer;
}
var filterLower = filter.First().ToLower();
filterValue = filterValue.ToLower();
if (filterLower.Contains("retail") || (filterLower.Contains("distributor"))
{
return customer.Where(x => (!string.IsNullOrEmpty(x.Retail) && x.Retail.Contains(filterValue)) || (!string.IsNullOrEmpty(x.Distributor) && x.Distributor.Contains(filterValue)));
}
if (filterLower.Contains("retail"))
{
query = customer.Where( x=> !string.IsNullOrEmpty(x.Distributor) && x.Distributor.Contains(filterValue));
}
if (filterLower.Contains("distributor"))
{
query = customer.Where(x => !string.IsNullOrEmpty(x.Retail) && x.Retail.Contains(filterValue)).Union(query);
}
return query;
}
专用IQueryable筛选器列表(IQueryable客户、列表筛选器、字符串筛选器值)
{
IQueryable query=new List().AsQueryable();
if(filter==null | | string.IsNullOrEmpty(filterValue))
{
退货客户;
}
var filterLower=filter.First().ToLower();
filterValue=filterValue.ToLower();
if(filterLower.Contains(“零售”)| |(filterLower.Contains(“分销商”))
{
返回customer.Where(x=>(!string.IsNullOrEmpty(x.Retail)和&x.Retail.Contains(filterValue))| |(!string.IsNullOrEmpty(x.Distributor)和&x.Distributor.Contains(filterValue));
}
if(filterLower.Contains(“零售”))
{
query=customer.Where(x=>!string.IsNullOrEmpty(x.Distributor)和&x.Distributor.Contains(filterValue));
}
if(filterLower.Contains(“分发服务器”))
{
query=customer.Where(x=>!string.IsNullOrEmpty(x.Retail)和&x.Retail.Contains(filterValue)).Union(查询);
}
返回查询;
}
只是为了跟进我的研究和EF团队最近的回应,是的,你可以使用拦截器来完成这项工作,但很难做到这一点,更不用说不切实际和低效了。像我使用的其他ORM一样,使用字段表达式来简化注入是很好的。是的,如果我知道这是定制的,那就是这种情况呃,对象,我更多地考虑将原始sql替换为字段。