2012-11-28 60 views
1

我想要做一個LINQ查詢,它可以將多個變量與一個字符串進行比較。我見過LINQ for LIKE queries of array elements,這很有幫助,但並不完全。我需要相反的。LINQ:單個謂詞中的多個LIKE子句

我想要做的是以下內容:比方說,我有一個Company對象與NameAddress。我也有一個字符串keyword。然後,我想在NameAddresskeyword列表中找到所有Company。在SQL這將是...

SELECT * FROM Company 
WHERE Name LIKE '%keyword%' OR Address LIKE '%keyword%' 

我一直在使用實體框架,我已經試過如下:context.Companies.Where(x => new string[] { x.Name, x.Address }.Contains(keyword),以及context.Companies.Where(x => new string[] { x.Name, x.Address }.Any(r => r.Contains(keyword)),但是沒有成功。第一個給我一個IN條款,第二個......我不知道它做了什麼,但它不給我我想要的。

對不起,我對錶達式沒有很深入的理解。我希望自己能夠從頭開始編寫自己的自定義表達式,但劃傷它我還不能......現在我可以幫助我嗎?

回答

6

不只是使用||運算符的任何原因?

context.Companies.Where(x => x.Name.Contains(keyword) || 
          x.Address.Contains(keyword)) 

我希望這將被翻譯成您的原始SQL。

+0

只是爲了方便和可讀性的緣故...我不想要一個完整的'||'列表 – matt

+0

@matt:那麼,有些方法可以通過編程方式創建表達式(請參見http://www.albahari。 com/nutshell/predicatebuilder.aspx) - 但是你給出的情況只有兩個值,所以我絕對會*在那裏使用'||'。即使你創建的數組的名稱和地址在工作中的版本,我會說它比我的答案中的代碼更不可讀。如果你問過一個具有更多屬性的場景 - 或者具有可變數量的屬性 - 我會給出不同的答案。 –

+0

啊...我明白了。那麼我寫這只是爲了說明的目的,我的對象不僅僅是兩個屬性,而且它將是一個系統範圍的實現(因爲我正在爲它進行搜索)。我以前看過那個網站,而且我看到了'.Or'這個東西,但是我仍然不知道如何使用它來將可插入到我當前的LINQ語句中的東西寫出來。 我沒有要求硬性和快速的代碼,但我有點不知道如何開始使用這些表達式......有點感覺就像重新學習C#一樣。 – matt