我在我的项目“查询”中有一个屏幕,我用户可以执行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