C# 不使用大小写也不使用查找逻辑,但您告诉我如何更改查询以匹配所有内容,而不依赖string.Contains逻辑。老实说,这是我们最小的麻烦之一:)。数据库迁移中的冒险。无论如何,谢谢你提供的信息。 public List<InventoryModel
不使用大小写也不使用查找逻辑,但您告诉我如何更改查询以匹配所有内容,而不依赖C# 不使用大小写也不使用查找逻辑,但您告诉我如何更改查询以匹配所有内容,而不依赖string.Contains逻辑。老实说,这是我们最小的麻烦之一:)。数据库迁移中的冒险。无论如何,谢谢你提供的信息。 public List<InventoryModel,c#,entity-framework,linq-to-sql,C#,Entity Framework,Linq To Sql,不使用大小写也不使用查找逻辑,但您告诉我如何更改查询以匹配所有内容,而不依赖string.Contains逻辑。老实说,这是我们最小的麻烦之一:)。数据库迁移中的冒险。无论如何,谢谢你提供的信息。 public List<InventoryModel> FindByTrackingNumberSubstring( string substring ) { // (bad) matches nothing when argument is string.Empty //
string.Contains
逻辑。老实说,这是我们最小的麻烦之一:)。数据库迁移中的冒险。无论如何,谢谢你提供的信息。
public List<InventoryModel> FindByTrackingNumberSubstring( string substring )
{
// (bad) matches nothing when argument is string.Empty
//var query = _modelTable.Where( entity => entity.Tracking_Number.ToLower().Contains( substring.ToLower() ) );
// (good) matches everything when argument is string.Empty
string lower = substring.ToLower();
var query = _modelTable.Where( entity => entity.Tracking_Number.ToLower().Contains( lower ) );
return query.ToList<InventoryModel>();
}
// SQL for queries 1 and 2, respectively (stripped out SELECT and FROM stuff for brevity)
WHERE ((CASE WHEN (( CAST(CHARINDEX(LOWER(@p__linq__0), LOWER([Extent1].[Tracking Number])) AS int)) > 0) THEN cast(1 as bit) WHEN ( NOT (( CAST(CHARINDEX(LOWER(@p__linq__0), LOWER([Extent1].[Tracking Number])) AS int)) > 0)) THEN cast(0 as bit) END) = 1)
WHERE ((CASE WHEN (LOWER([Extent1].[Tracking Number]) LIKE @p__linq__0 ESCAPE N'~') THEN cast(1 as bit) WHEN ( NOT (LOWER([Extent1].[Tracking Number]) LIKE @p__linq__0 ESCAPE N'~')) THEN cast(0 as bit) END) = 1)
if(!string.IsNullOrEmpty(substring))
query = query.Where(entity => entity.Tracking_Number.Contains(substring));
if(!string.IsNullOrEmpty(substring))
query = query.Where( entity => entity.Tracking_Number.ToLower().Contains(substring.ToLower()));