2009-10-18 73 views
1

我試圖完成下面的查詢(請注意.StartsWith):LINQ的NHibernate的:對多個屬性.StartsWith

return (from p in _session.Linq<Profile>() 
     where (p.Firstname + " " + p.Lastname).StartsWith(wildcard) 
     select p).ToList(); 

此拋出:無法解析屬性:Firstname.Lastname。

如果我這樣做:

return (from p in _session.Linq<Profile>() 
     where p.Firstname.StartsWith(wildcard) 
     select p).ToList(); 

一切工作。怎麼會這樣?

在此先感謝!

+0

我更新了 - 什麼是你想怎麼辦?選擇名稱以某種東西開頭的所有'Profile'? – 2009-10-18 15:13:10

+0

我試圖選擇名字和姓氏(concat'ed)等於通配符的所有配置文件。 – jhovgaard 2009-10-18 16:00:41

+0

你的意思是平等嗎? – 2009-10-18 19:57:28

回答

2

WhereExpression不知道如何處理串聯字符串。它試圖理解屬性,而不是價值。

此外,以備將來參考StartsWith與CONCAT,另一個用了會在實踐中返回相同的事情。

這是你想要的嗎?

return (from p in _session.Linq<Profile>() 
     where p.Firstname.StartsWith(wildcard) || p.Lastname.StartsWith(wildcard) 
     select p).ToList(); 
+1

好吧,這很有道理! 但是,如果我不能這樣做,你有另一種方式來完成我想要做的事情嗎? – jhovgaard 2009-10-18 15:06:47

+0

不會工作。名字是說「拉姆」和姓氏是說「拉爾」。如果我搜索「Ram Lal」,該怎麼辦?這不會給你結果。 – 2014-08-18 07:22:26

1

更新:根據新的見解和編輯問題改寫答案。

什麼是wildcard什麼是預期輸出與輸入?如果連續輸入"Abel" + " " + "Braaksma",它將返回爲wildcard.StartsWith("Abel")wildcard.StartsWith("Abel Br")而不是wildcard.StartsWith("Braaks")。你的意思可能是Contains?但是,這不會解決你的錯誤:

您收到異常似乎來自NHibernate的,而不是從你的代碼。 Lastname可能沒有正確的映射到數據庫表嗎?你能顯示堆棧跟蹤嗎?你可以在LINQ語句的上下文之外訪問屬性,但是填充表中的數據嗎?

+1

好的,我進一步了。我幾乎確信這個錯誤是由於Linq中的一個NHibernate錯誤造成的。當查詢由L2NHibernate「轉換」時,它實際上是在請求Firstname.Lastname而不是連接這兩個屬性。 – jhovgaard 2009-10-19 19:15:38

相關問題