LINQ和放大器; String.ToLower()的奇怪行为 [英] Linq & String.ToLower() strange behavior

查看:149
本文介绍了LINQ和放大器; String.ToLower()的奇怪行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我已经在服务器端返回从邮编表不同城市的列表查询。

我使用WCF RIA服务。

下面的查询成功返回228个城市时, provincename ==

    public IQueryable<CityPM> GetCities(string provinceName)
    {
        return this.ObjectContext.ZipCodes.Where(z => z.Province.Contains(provinceName))
                                          .GroupBy(z => z.City)
                                          .Select(g => g.FirstOrDefault())
                                          .Select(zc => new CityPM() { ID = zc.ID, Name = zc.City });
    }



但如果我使用ToLower将()方法如下,该查询返回0城市当 provincename ==

    public IQueryable<CityPM> GetCities(string provinceName)
    {
        return this.ObjectContext.ZipCodes.Where(z => z.Province.ToLower().Contains(provinceName.ToLower()))
                                          .GroupBy(z => z.City)
                                          .Select(g => g.FirstOrDefault())
                                          .Select(zc => new CityPM() { ID = zc.ID, Name = zc.City });
    }



为什么不是查询返回任何东西?

Why isn't the query returning anything?

推荐答案

尝试检查生成的SQL,通过使用DB管理工具,或者在查询表达式的末尾呼吁.ToTraceString()。

Try checking the SQL generated, either by using DB management tools, or calling .ToTraceString() at the end of the query expression.

参考:的http://博客。 aggregatedintelligence.com/2010/06/viewing-entity-framework-generated-sql.html

我们使用通过延长工作ToTraceString:

We use ToTraceString at work using an extension:

public static IQueryable<T> TraceSql<T>(this IQueryable<T> query)
{
    var sql = ((System.Data.Objects.ObjectQuery)query).ToTraceString();

    // do whatever logging of sql you want here, eg (for web)
    // (view by visiting trace.axd within your site)
    HttpContext.Current.Trace.Write("sql", sql);

    return query;
}



然后,它可以用作如下:

It can then be used as follows:

public IQueryable<CityPM> GetCities(string provinceName)
{
    return this.ObjectContext.ZipCodes.Where(z => z.Province.ToLower().Contains(provinceName.ToLower()))
                                      .GroupBy(z => z.City)
                                      .Select(g => g.FirstOrDefault())
                                      .Select(zc => new CityPM() { ID = zc.ID, Name = zc.City })
                                      .TraceSql();
}

请原谅我的拼写错误,这是从内存。希望它会帮助你了解你的问题。

Please forgive me for any typos, this is from memory. Hopefully it will help you understand your problem.

这篇关于LINQ和放大器; String.ToLower()的奇怪行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆