如果属性已填充,则添加谓词

use*_*827 0 c# linq

请问,我有一节课:

public class PersonalInfo
{
   public string Firsname {get;set;}
   public string Lastname {get;set;}
   public string Email {get;set;}
   public string Phone {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

数据来自文件.而且,我需要通过此属性从文件中选择数据:

private IList<PersonalInfo> FindByPersonalData(string firstName, string lastName, string email, string phone)
{
...
}
Run Code Online (Sandbox Code Playgroud)

有几个属性可以为空,但如果它们已填满,则按其搜索.我可以检查每一个组合,但它很难看.什么是最好的解决方案?
谢谢

Dan*_*zey 5

典型的子查询是在每个场上使用短路.对数据结构做一些假设,看起来像这样:

var result = from p in PersonalInfoList
         where (string.IsNullOrEmpty(firstName) || firstName == p.FirstName)
            && (string.IsNullOrEmpty(lastName) || lastName == p.LastName)
            && (string.IsNullOrEmpty(email) || email == p.Email)
            && (string.IsNullOrEmpty(phone) || phone == p.Phone)
         select p
Run Code Online (Sandbox Code Playgroud)

或者,取决于您的Linq偏好:

var result = PersonalInfoList.Where(p =>
            (string.IsNullOrEmpty(firstName) || firstName == p.FirstName)
            && (string.IsNullOrEmpty(lastName) || lastName == p.LastName)
            && (string.IsNullOrEmpty(email) || email == p.Email)
            && (string.IsNullOrEmpty(phone) || phone == p.Phone))
Run Code Online (Sandbox Code Playgroud)

因此,如果任何参数为null/empty,则将跳过与数据的比较.