2013-12-23 54 views
3

在我的Person表中,我有一个名为ps_fullname的字段,其中包含..well人的全名。 在我的aspx页面中,我有一个搜索框可以按名称筛选人物。只要我输入一个名字,它就可以正常工作。 ( 一个词)。如果我输入两个名字(名字lastname),结果为零。从linq c中包含全名的字段中搜索名字和姓氏#

这里是我的LINQ语句

string[] namelist = txtName.text.Split(' '); 

DatabaseContext db = new DatabaseContext(); 

var query = (from person in db.People 
    where 
    (dhaaira == 0 ? true : (dhaaira == null ? person.ps_default_dhaaira_id == null : person.ps_default_dhaaira_id == dhaaira)) && 
    (atoll == 0 ? true : (atoll == null ? person.PAddress.Island.il_atoll_id == null : person.PAddress.Island.il_atoll_id == atoll)) && 
    (island == 0 ? true : (island == null ? person.PAddress.ad_island_id == null : person.PAddress.ad_island_id == island)) && 
    (address == 0 ? true : (address == null ? person.ps_p_add_id == null : person.ps_p_add_id == address)) && 
    (string.IsNullOrEmpty(nic) ? true : person.ps_nic.Trim().ToLower() == nic.Trim().ToLower()) && 

    (string.IsNullOrEmpty(name) ? true : (namelist.All(n => person.ps_fullname.ToLower().Contains(n.ToLower())))) 
    // orderby orderBy 
    orderby person.PAddress.ad_island_id, person.ps_p_add_id, person.ps_fullname 
    select person).Skip(startRowIndex).Take(maximumRows).ToList(); 

我到底做错了什么?如果这太混乱了,你可以举一个简单的例子,我可以使用多个词来过滤字符串字段。

+0

什么是你需要搜索?名字+姓氏或根据用户输入搜索名字或姓氏 –

+0

。如果用户只输入'john',我希望所有拥有'john'的人都是全名。 如果输入是'john jill',我希望所有拥有'john'和'jill'全名的人。 – user3128658

+0

您在where子句中有很多检查,请检查它是否通过了此场景。 –

回答

1

所有与任何

namelist.Any(n => person.ps_fullname.ToLower().Contains(n.ToLower())) 

更换我试图用它LinqPad

With AnyWith All

+0

结果没有做任何明显的改变。表现与之前相同。谢谢。 – user3128658

5

此代码按预期工作:

 string txtName = "hello wo"; 
    string[] namelist = txtName.Split(' '); 

    string[] db = new string[] { "hello world", "hello dear"}; 

    List<String> results = db.Where(r => namelist.All(n => r.ToLower().Contains(n.ToLower()))).ToList(); 

结果将包含一个项目 - “世界你好”。

所以,我的猜测是,你的输入无效。

相关问题