使用Sqlite-net的多个查询条件

时间:2014-03-24 14:24:05

标签: c# winrt-xaml sqlite-net

我正在开发一个小型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();

1 个答案:

答案 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()方法时执行一次。