C# 使用Sqlite net的多个查询条件

C# 使用Sqlite net的多个查询条件,c#,winrt-xaml,sqlite-net,C#,Winrt Xaml,Sqlite Net,我正在开发一个小的Windows应用商店应用程序,我正在使用sqlite net 我有一个数据库的人,每个人都有一个名字,身份证,性别等 在我的项目中,有一个视图要在此数据库中搜索。 用户可以插入一个或多个信息进行搜索 因此,我构建了搜索对象(OPerson),我想用它来达到目标 现在我为这个人的每个属性创建了一个函数,比如“searchById”、“searchByName”等等。。最后,我结合这些函数得到结果 是否可以使用sqlite net的强大功能创建一个唯一的方法,其中所有方法都是连接

我正在开发一个小的Windows应用商店应用程序,我正在使用sqlite net

我有一个数据库的人,每个人都有一个名字,身份证,性别等

在我的项目中,有一个视图要在此数据库中搜索。 用户可以插入一个或多个信息进行搜索

因此,我构建了搜索对象(OPerson),我想用它来达到目标

现在我为这个人的每个属性创建了一个函数,比如“searchById”、“searchByName”等等。。最后,我结合这些函数得到结果

是否可以使用sqlite net的强大功能创建一个唯一的方法,其中所有方法都是连接的?还可以检查某些属性的值

如果我经过一个物体

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();
pers=(来自db.Table()中的p)
其中(如果OPerson.Id!=null)p.Id==OPerson.Id}
和{(如果OPerson.Name!=null)p.Name.Contains(OPerson.Name)}
和{(如果条件)其中contion}
选择p.ToList();

我建议分几个步骤构建查询。通过这种方式,您可以将条件带到查询外部,这使得查询更干净,也让您拥有更多的控制权。大概是这样的:

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();
var pers=from p in db.Table()
选择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()
方法时,该查询只执行一次。

对不起,我的笔记本电脑O.O有问题