Asp.net mvc Linq:如何在具有相同条件的两列中搜索行

Asp.net mvc Linq:如何在具有相同条件的两列中搜索行,asp.net-mvc,linq-to-sql,Asp.net Mvc,Linq To Sql,在我的控制器中,我有一个名为SearchForContact的操作方法,它使用两个字符串参数firstName和LastName。有三种情况: 如果两个参数都为null,则视图将重新显示,并显示一条错误消息,提示用户输入两个参数中的至少一个 如果两个参数都不为null,我可以检索联系人并在视图上显示结果 不幸的是,当任何一个参数为null时,我什么也得不到。我怀疑我没有正确地编写Linq语句。 以下是处理搜索的语句: var contacts = contactRepository.Search

在我的控制器中,我有一个名为SearchForContact的操作方法,它使用两个字符串参数firstName和LastName。有三种情况:

如果两个参数都为null,则视图将重新显示,并显示一条错误消息,提示用户输入两个参数中的至少一个

如果两个参数都不为null,我可以检索联系人并在视图上显示结果

不幸的是,当任何一个参数为null时,我什么也得不到。我怀疑我没有正确地编写Linq语句。 以下是处理搜索的语句:

var contacts = contactRepository.SearchForContacts(firstName, lastName).ToList();
以下是位于models文件夹中的存储库类ContactRepository.cs中的我的助手方法

public IQueryable<Contact> SearchForContacts(string firstName, string lastName)
    {
        if (firstName == null)
            return OneCriteria(lastName);
        if (nom == null)
            return OneCriteria(firstName);
        else
            return TwoCriteria(firstName, lastName);

    }
    private IQueryable<Contact> OneCriteria(string criteria)
    {
        var contacts = from contact in db.Contacts
                       where ((contact. firstName == criteria) ||
                              (contact. lastName == criteria))
                       orderby contact. firstName
                       select contact;
        return contacts;
    }
    private IQueryable<Contact> TwoCriteria(string firstName, string lastName)
    {
        var contacts = from contact in db.Contacts
                       where ((contact. firstName == firstName) &&
                             (contact. lastName == lastName))
                       orderby contact. firstName
                       select contact;
        return contacts;
    }
谢谢你的帮助,如果你不改变的话

if (nom == null)

当我测试它时,它似乎工作正常。

试试这个

 if ((firstName == null) && (lastName != null)  )
        return OneCriteria(lastName);
如果名字!=null&&lastName==null 返回一个criteriafirstname

否则 返回TwoCriteriafirstName、lastName

希望这有帮助。

您可以尝试以下方法: iffirstName==null&&lastname==null {犯你的错误}

否则 {

var contacts=数据库中的from contact.contacts选择contact

iffirstName!=空联系人=联系人中的FN,其中FN.firstName==firstName选择FN

iflastName!=空联系人=联系人中的项次,其中FN.lastName==lastName选择项次


}

我已经纠正了这个错误,但当我使用一个标准62时,它仍然不起作用,我尝试了你所说的,它不起作用。但是,在遵循执行流程的同时。我看到的不是空字符串,而是空字符串。然后我用空字符串替换null,它就工作了。我不知道发生了什么事。很高兴你自己在这里找到了答案。可能幕后的某个地方是process.NET将字符串空值转换为您提到的空字符串,我不确定。
 if ((firstName == null) && (lastName != null)  )
        return OneCriteria(lastName);