0

我正在尝试在 .net MVC4 C# 中创建列表过滤器。我有将字符串发送到控制器的 ajax 查询,并根据数据库中的匹配项返回记录数。

所以当它StringIsNullOrEmpty()IsNullOrWhiteSpace()给我带来了很好的结果。我现在在匹配值方面遇到问题。

虽然看起来我很容易所以我尝试了-

控制器

public ActionResult SearchAccountHead(string accountHead)
{
    var students = from s in db.LedgerTables
                    select s;
    List<LedgerModel> ledge = null;
    if (!String.IsNullOrEmpty(accountHead)) 
    {
                    //Returns non-empty records
    }
    if (String.IsNullOrEmpty(accountHead) && String.IsNullOrWhiteSpace(accountHead))
    {

        //Checks whether string is null or containing whitespace
        //And returns filtered result
    }


    return PartialView(ledge);

}

现在,如果我的字符串与我在控制器中使用的字符串不匹配,那么我尝试映射它-

if (String.IsNullOrEmpty(accountHead) && String.IsNullOrWhiteSpace(accountHead) && !String.Compare(accountHead))

if (String.IsNullOrEmpty(accountHead) && String.IsNullOrWhiteSpace(accountHead) && !String.Compare(AccountHead,ledge.AccountHead))

但在这两种情况下,它都不起作用。

字符串不匹配时如何进入第二种方法?

4

4 回答 4

2

你不能申请string.Comparewith !,因为string.Compare会返回一个整数值。如果您正在比较字符串是否相等,那么如果使用它会更好string.Equals,它还有一个重载,可以进行不区分大小写的比较。

您可以进行以下检查:

   if (String.IsNullOrWhiteSpace(accountHead) && 
                !String.Equals(AccountHead, ledge.AccountHead,StringComparison.InvariantCultureIgnoreCase))

作为旁注,您可以删除

if (String.IsNullOrEmpty(AccountHead) && String.IsNullOrWhiteSpace(AccountHead))

并使用

if (String.IsNullOrWhiteSpace(AccountHead))

因为string.IsNullOrWhiteSpace也会检查空字符串。

于 2013-09-24T13:43:04.543 回答
1

您可以使用string.Equals()并将其传递给比较逻辑的选项。像这样的东西:

AccountHead.Equals(ledge.AccountHead, StringComparison.InvariantCultureIgnoreCase)

这将使用不变的AccountHead文化ledge.AccountHead规则以不区分大小写的方式进行比较。还有其他选项可供选择。

于 2013-09-24T13:43:43.117 回答
0

您可以保持简单并编写类似这样的内容!(accountHead == ledge.AccountHead)。正如我所见,您不需要比较,而是检查字符串是否相等。通常 Equals 是最好的方法,但 "==" 执行语义和 object.ReferenceEquals -- 引用比较。所以我会选择那个。希望这可以帮助

于 2013-12-02T07:46:32.497 回答
0

您可以使用String.Compare做同样的事情String.Equals,但是,它有点不简洁,例如

String.Compare(AccountHead, ledge.AccountHead, StringComparison.OrdinalIgnoreCase) <> 0

这是更短的方法...

!AccountHead.Equals(ledge.AccountHead, StringComparison.OrdinalIgnoreCase);
于 2013-09-24T13:39:09.607 回答