将 SQL 转换为 Linq 表达式
Convert SQL to Linq expression
我正在寻找转换此查询的方法:
Select *
From Tasks
Where Addresses_Street1+' '+Addresses_Street2+' '+Addresses_City +' '+Addresses_ZipCode Like '%'+replace(ltrim(rtrim('Leon Deladriere 15')),' ','%')
到 Linq C# 表达式。
我知道 Contains() 和 Trim() 可用于此方法,但如何处理用“%”替换“”?
此表达式用于向用户提供带有地址的单个输入,并查看多个列以找到匹配的列。
我使用 Linqpad,但在 Linq 中看不到等效项
试试这个:
var user = "Leon Deladriere 15".Trim();
Tasks.Where(t => (t.Addresses_Street1 + t.Addresses_Street2 + t.Addresses_City + t.Addresses_ZipCode).Contains(user));
你可以试试。
(from r in Tasks where SqlMethods.Like(
r.Addresses_Street1 + " " +
r.Addresses_Street2 + " " +
r.Addresses_City + " " +
r.Addresses_ZipCode,
"%Leon Deladriere 15".Trim().Replace(" " , "%"))
select r)
请注意,LinqSql 足够聪明,知道它可以在本地执行 Trim 和替换,而不是要求 Sql 执行。
但是,如果您使用字段而不是常量,例如
(from r in Task where SqlMethods.Like( ... ,
r.Addresses_Street1 + " " +
r.Addresses_Street2 + " " +
r.Addresses_City + " " +
r.Addresses_ZipCode,
r.AnotherField.Trim().Replace(" " , "%"))
select r)
然后这将要求 sql 执行 trim 并替换。
我正在寻找转换此查询的方法:
Select *
From Tasks
Where Addresses_Street1+' '+Addresses_Street2+' '+Addresses_City +' '+Addresses_ZipCode Like '%'+replace(ltrim(rtrim('Leon Deladriere 15')),' ','%')
到 Linq C# 表达式。
我知道 Contains() 和 Trim() 可用于此方法,但如何处理用“%”替换“”?
此表达式用于向用户提供带有地址的单个输入,并查看多个列以找到匹配的列。
我使用 Linqpad,但在 Linq 中看不到等效项
试试这个:
var user = "Leon Deladriere 15".Trim();
Tasks.Where(t => (t.Addresses_Street1 + t.Addresses_Street2 + t.Addresses_City + t.Addresses_ZipCode).Contains(user));
你可以试试。
(from r in Tasks where SqlMethods.Like(
r.Addresses_Street1 + " " +
r.Addresses_Street2 + " " +
r.Addresses_City + " " +
r.Addresses_ZipCode,
"%Leon Deladriere 15".Trim().Replace(" " , "%"))
select r)
请注意,LinqSql 足够聪明,知道它可以在本地执行 Trim 和替换,而不是要求 Sql 执行。
但是,如果您使用字段而不是常量,例如
(from r in Task where SqlMethods.Like( ... ,
r.Addresses_Street1 + " " +
r.Addresses_Street2 + " " +
r.Addresses_City + " " +
r.Addresses_ZipCode,
r.AnotherField.Trim().Replace(" " , "%"))
select r)
然后这将要求 sql 执行 trim 并替换。