将SQL转换为Linq表达式

时间:2017-02-15 11:21:18

标签: c# linq linqpad

我正在寻找转换此查询的方法:

 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中看不到相同的内容

2 个答案:

答案 0 :(得分:1)

你可以试试。

(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非常聪明,知道它可以在本地进行修剪和替换,而不是要求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进行修剪和替换。

答案 1 :(得分:0)

试试这个:

var user = "Leon Deladriere 15".Trim();
Tasks.Where(t => (t.Addresses_Street1 + t.Addresses_Street2 + t.Addresses_City + t.Addresses_ZipCode).Contains(user));