我在我的項目「查詢」中有一個屏幕,我用戶可以執行2種搜索。我無法弄清楚如何在實體中執行「like」或「And or null」。Like和And或者ISNull使用Linq to Entity Entity Framework4?你是怎樣做的?
- 簡單搜索
- 高級高級搜索(使用「和」運算符)(使用「贊」運營商在各個領域搜索)
所以,讓我們把這些3個表和補諾迪例子。
- 客戶表(客戶ID,姓名,姓)
- 地址(AddressID,街,市)
- CustomerOrder(訂單ID,ORDERNAME)
基本搜索: 這是我會怎樣這樣做在SQL
SELECT TOP (100) C.Name,C.Surname,CA.Street,CA.City,CO.OrderName
FROM Customer C
LEFT JOIN CustomerAddress CA ON C.CustomerID=CA.CustomerID
LEFT JOIN CustomerOrders CO ON C.CustomerID=CA.CustomerID
WHERE (C.CustomerID LIKE '%' + @SearchText + '%'
OR C.Surname LIKE '%' + @SearchText + '%'
OR C.Name LIKE '%' + @SearchText + '%'
OR CA.Street LIKE '%' + @SearchText + '%'
OR CA.City LIKE '%' + @SearchText + '%'
OR CO.OrderName LIKE '%' + @SearchText + '%'))
高級搜索
這是我的SQL WHERE子句
WHERE (C.CustomerID [email protected] or @CustomerID ISNULL
AND C.Surname [email protected] or @Surname ISNULL
AND [email protected] or @Name ISNULL
AND CA.Street [email protected] or @Street ISNULL
AND CA.City [email protected] or @City ISNULL
AND CO.OrderName [email protected] or @OrderName ISNULL)
AND ((ModifiedDate BETWEEN ISNULL(convert(varchar,@FromDate,101),'01/01/1901')
AND ISNULL(convert(varchar,@ToDate,101),'12/31/9999'))
你怎麼做喜歡或和或爲空在實體框架?
非常感謝!
非常感謝您的reply.Managed使它幾乎所有的幹活。有一個問題在創造一個「贊」與integer.Do我需要做一些事情,如「SqlFunctions.StringConvert((雙)C .CustomerID))。Contains(「12」)。但是sql輸出與c.CustomerID LIKE'%'+ @SearchText +'%'沒什麼兩樣。 ))LIKE N'%1%') – user9969 2010-11-30 16:49:09
@ user231465,我剛剛嘗試過使用`SqlFunctions.StringConvert`,並且得到了正確的結果。在這種情況下EF生成的sql並不像手動編寫代碼那麼簡單。它使用`STR`函數將其轉換爲浮點數,然後進行串處理,然後進行`LIKE`比較。出於某種原因,對於使用`int`的`StringConvert`沒有重載,所以`(double)c.CustomerID`是轉換爲`float`的原因。另外,我假設`.Contains(「12」)`在你的評論中產生了`LIKE N'%12%``,而不是'LIKE N'%1%``。 – 2010-11-30 23:57:17