在lambda表达式中使用String.compare

时间:2013-11-14 10:48:18

标签: linq entity-framework-4 lambda

我有以下模型方法:

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

2 个答案:

答案 0 :(得分:0)

如果CustomerName和customername是字符串,您可以尝试

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

答案 1 :(得分:0)

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

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

如果你想使用那个特定的功能,你必须做这样的事情(使用Lambda表达式):

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

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

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

您可能需要ToString(),具体取决于客户名称的类型。