2012-01-10 101 views
1

如何爲linq的字符串連接寫一個表達式? 我有這樣的:如何爲linq的字符串連接寫一個表達式?

x => (x.Address1 + " " + x.Address2).Contains("add") 

謂語,我不知道怎麼寫字符串連接lambda表達式,而不使用string.Concat方法。所以我有兩個表達式(x.Address1" "),我需要連接它們。

+2

你的問題並不完全清楚。字符串連接與LINQ或lambda表達式有什麼關係?你爲什麼要這樣做*「不使用string.Concat」*(或「+」運算符)? – Groo 2012-01-10 16:51:29

+1

有什麼問題?爲什麼你不喜歡string.Concat? – 2012-01-10 16:53:33

+0

你想查詢與謂詞相匹配的對象的NHibernate嗎?我只是猜測是因爲nhibernate標籤。 – Joey 2012-01-10 16:58:53

回答

1

UPDATE:此鏈接有解決方案:NHibernate/MySQL string concatenation

請問串foo.Contains(foo)曾經包含一個空間?如果不是,請嘗試Ade的第二個謂詞,因爲這可避免串聯。

如果這不起作用,您可能需要從數據庫中獲取比您需要的更多對象,並在代碼中對其進行過濾。如果您必須這樣做,可能需要使用如x => x.Address1.Contains(foo[0]) || x.Address2.Contains(foo[0])這樣的初始謂詞來限制返回的對象的數量。我把它留給你來提出一個比這更好的初始謂詞。

+0

我不能使用這樣的謂詞x => x.Address1.Contains(foo [0])|| x.Address2.Contains(foo [0])因爲我的初始謂詞可能更復雜:x =>(x.Address1 +「」+ x.Address2 +「」x.City +「,」+ x.ZipCode).Contains(「添加「),我可以有==,StartWith,EndWith而不是Contains。所以我需要能夠使用表達式動態地連接屬性和常量。 – 2012-01-11 10:01:37

+1

也許這將有助於:http://stackoverflow.com/questions/6105340/nhibernate-mysql-string-concatenation – Joey 2012-01-11 11:40:05

+0

喬伊:你的評論幫了我很多。寫在答案中,我會接受它。 – 2012-01-11 14:59:40

2

我看不出爲什麼你不想使用String.Concat。這工作得很好:

var foo = wibble.Select(s => String.Concat("foo", s, "bar")); 

讓我們回到你的榜樣,豈不是更好寫x => x.Address1.Contains("add") || x.Address2.Contains("add")

+0

正如我上面寫的,我不能使用string.Concat,因爲當我嘗試查詢NHibernate的對象時,我得到不支持的異常。 – 2012-01-10 20:37:25

+0

啊,在這種情況下,你的問題是關於NHibernate對lambda表達式的支持,而不是一般的Linq。這是ORM常見的,所以我只是堅持更原始的操作(即只是將字符串添加到一起) - 問題基本上是您的ORM不知道如何將String.Concat(foo,bar)轉換爲SQL聲明。 – 2012-01-11 13:49:14

相關問題