我正在开发一个小型Windows应用商店应用,我正在使用sqlite-net
我有一个人的数据库,每个人都有一个名字,身份,性别等等
在我的项目中,有一个要在此数据库中搜索的视图。 用户可以插入一个或多个信息进行搜索。
所以,我构建搜索对象(OPerson),我想用它来达到目标。
现在我为“searchById”“searchByName”这样的人的每个属性创建了一个函数,依此类推..最后我将这些函数组合起来得到结果
是否可以使用sqlite-net的强大功能创建一个独特的方法,所有这些方法都连接在一起?还检查一些属性的值
如果我传递一个对象OPerson
Id = null
Name = John
Age = null
Sex = male
是否可以编写查询以达到该目标?像这样的伪代码
pers = (from p in db.Table<Persons>()
where (if OPerson.Id !=null) p.Id==OPerson.Id}
AND {(if OPerson.Name !=null) p.Name.Contains(OPerson.Name)}
AND {(if condition) where-contion}
select p).ToList();
答案 0 :(得分:0)
我建议您分几步构建查询。这样,您可以将条件带到查询之外,使其更清晰,并为您提供更多控制。像这样:
var pers = from p in db.Table<Persons>()
select p;
if(OPerson.Id !=null)
pers = pers.Where(p => p.Id==OPerson.Id);
if(OPerson.Name !=null)
pers = pers.Where(p => p.Name.Contains(OPerson.Name);
....
....
var results = pers.ToList();
此代码仍生成一个查询,只在您调用ToList()
方法时执行一次。