0

我正在开发一个小型 Windows Store 应用程序,我正在使用 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();
4

1 回答 1

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

于 2014-03-24T14:32:16.877 回答