LINQ和放大器; String.ToLower()的奇怪行为 [英] Linq & String.ToLower() strange behavior
问题描述
我已经在服务器端返回从邮编表不同城市的列表查询。
我使用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屋!