假设我们正在使用EF6,db
是EF DbContext。 假设用户可以输入五个可能的查询:
- 获取汽车年龄等于10岁的记录。
- 获取汽车年龄小于10岁的记录。
- 获取汽车年龄大于10岁的记录。
- 获取汽车年龄不等于10岁的记录。
- 获取所有汽车记录。
枚举操作符 { 相等, 不相等, 小于, 大于, 任意 };我们已经在动态构建多个查询方面有了答案,但那是我想要的不同部分(如果问题是“用户可以搜索汽车年龄和里程数,也可以不搜索”)。
var 操作符 = //用户选择的操作符,从上面的枚举中选择 var 车龄 = //用户选择的整数,指定所需年龄 List 车辆;
switch(操作符) { case 相等: { 车辆 = db.Cars.Where(c=> c.Age == 车龄).ToList(); } case 不相等: { 车辆 = db.Cars.Where(c=> c.Age != 车龄).ToList(); } case 小于: { 车辆 = db.Cars.Where(c=> c.Age < 车龄).ToList(); } case 大于: { 车辆 = db.Cars.Where(c=> c.Age > 车龄).ToList(); } case 任意: { 车辆 = db.Cars.ToList(); } }如何更有效地做到这一点? switch操作符看起来很傻。 this article 看起来在回答这个问题,但我不完全理解。
编辑:为了回应评论澄清,我的“目标”是任何标准搜索,以汽车为例,用户将拥有许多字段,可以选择运算符。他们可以使用任何、所有或没有字段,例如:
里程数:运算符,值 年份:运算符,值 品牌:(例如是/不是),汽车品牌