【问题标题】:Using String.compare inside a lambda expression在 lambda 表达式中使用 String.compare
【发布时间】:2018-07-09 22:31:19
【问题描述】:

我有以下模型方法:

public IQueryable<CustomerVLAN> CustomerVLANS(int customerid)
    {
        string customername = entities.AccountDefinitions.SingleOrDefault(a=>a.ORG_ID == customerid).ORG_NAME;// .tolist since i will be querying different context

        return tms.CustomerVLANS.Where(String.Compare(a=>a.CustomerName.ToString(), customername.ToString(), StringComparison.OrdinalIgnoreCase));
    }

但我无法在 where 子句 ,,, 中使用 String.Compare

【问题讨论】:

    标签: linq entity-framework-4 lambda


    【解决方案1】:

    前提是CustomerName和customername是字符串,你可以试试

    return tms.CustomerVLANS.Where(a=>a.CustomerName.ToUpper() == customername.ToUpper());
    

    【讨论】:

      【解决方案2】:

      Where 扩展使用提供的谓词函数过滤 IEnumerableFunc&lt;TSource, bool&gt;,在您的情况下为 Func&lt;CustomerVLAN, bool&gt;

      您的“String.Compare(a=&gt;a.CustomerName.ToString(), customername.ToString(), StringComparison.OrdinalIgnoreCase)”行返回一个整数,而不是 Func&lt;CustomerVLAN, bool&gt; 委托(我也不确定是否存在字符串 Compare 的过载,它需要您提供的值)。

      如果您想使用该特定功能,则必须执行以下操作(使用 Lambda 表达式):

      CustomerVLANS.Where(x => (String.Compare(x.CustomerName, customername, StringComparison.OrdinalIgnoreCase) == 0));
      

      除非有特殊原因,否则您最好使用String.Equals,它返回一个布尔值:

      CustomerVLANS.Where(x => (String.Equals(x.CustomerName, customername)));
      

      您可能需要您的 ToString(),具体取决于 CustomerName 的类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多