2017-02-15 110 views
0

我正在寻找一种方式来此查询转换:转换SQL到LINQ表达

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中

回答

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做装饰并更换。

0

看到相当于试试这个:

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