【发布时间】:2016-07-01 06:42:41
【问题描述】:
我尝试了几种可能性,并对博客和 stackoverflow 上的答案进行了适当的研究。可能是我,但我无法让这个动态 linq 查询正常工作。
我在 Web Api 项目上有一个控制器,定义了以下投影和路由。
private static readonly Expression<Func<Company, CompanyLightListDTO>> AsCompanyLightListDTO = x => new CompanyLightListDTO
{
Name = x.Name,
Id = x.Id
};
[Route("Test")]
[ResponseType(typeof(CompanyLightListDTO))]
public IQueryable<CompanyLightListDTO> GetTest(string name=null, string
email=null, bool? isSupplier=null, bool? isCustomer=null)
{
IQueryable<Company> query = db.Companies;
if (!String.IsNullOrEmpty(name))
query.Where(c => c.Name.Contains(name));
if (!String.IsNullOrEmpty(email))
query.Where(c => c.Email.Contains(email));
if (isSupplier.HasValue)
query.Where(c => c.isSupplier.Equals(isSupplier));
if (isCustomer.HasValue)
query.Where(c => c.isCustomer.Equals(isCustomer));
// Return ??
}
我尝试了几次退货。他们都忽略了所有以前的 where.() 并返回所有公司。
不工作,因为返回所有公司。不应用 Where 子句
return query.Include(c => c.Name).Select(AsCompanyLightListDTO);
return query.Select(AsCompanyLightListDTO);
我唯一能让这个方法起作用的方法就是这样做
return db.Companies.Include(c => c.Name)
.Where(c => c.Name.Contains(name)
&& c.Email.Contains(email)
&& c.isSupplier.Equals(isSupplier)
&& c.isCustomer.Equals(isCustomer))
.Select(AsCompanyLightListDTO);
但我想要一个动态 linq 查询,以便我可以进行这些类型的调用:
api/Companies/Test/name=somename&isCustomer=True api/公司/测试/isCustomer=True&isSupplier=True api/Companies/Test/name=somename&email=someemail
任何高尚的开发者愿意帮助一个新的程序员?
最好的问候 威尔逊
【问题讨论】:
标签: c# linq dynamic asp.net-web-api iqueryable