LINQ - 在Where條件式中使用in與not in(转载)

希望对大家在以后的项目中能用到,我也是在项目中碰到了这个问题;

本文来自:http://www.dotblogs.com.tw/dc690216/archive/2009/09/13/10601.aspx

算算時間,接觸LINQ也有一個月的時間了,可以算是落伍兼新生,不過最近在寫專案的時候,遇到了在LINQ的Where條件式中要如何使用in與not in呢!? 這時候真的只能坐在位子上仰天長笑,開始懷念T-SQL其實你還是最好用滴。之後,為了讓自己日後開發時更為方便,於是花了一點時間,參考一些網路資料及MSDN後,得到以下的測試結果:(以下以北風資料庫為範本)
T-SQL的IN:
Select ProductID, ProductName, CategoryID From dbo.Products 
Where not CategoryID in (1, 2)

T-SQL的NOT IN:
Select ProductID, ProductName, CategoryID From dbo.Products 
Where CategoryID not in (1, 2)
or
Select ProductID, ProductName, CategoryID From dbo.Products 
Where not CategoryID in (1, 2)

LINQ的IN:
var queryResult = from p in db.Products
where (new int?[] {1,2}).Contains(p.CategoryID)
select p;

LINQ的IN解析成SQL:
SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
FROM [dbo].[Products] AS [t0]
WHERE [t0].[CategoryID] IN (@p0, @p1)

LINQ的NOT IN:
var queryResult = from p in db.Products
where !(new int?[] { 1, 2 }).Contains(p.CategoryID)
select p;

LINQ的NOT IN解析成SQL:
SELECT [t0].[ProductID], [t0].[ProductName], [t0].[SupplierID], [t0].[CategoryID], [t0].[QuantityPerUnit], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t0].[ReorderLevel], [t0].[Discontinued]
FROM [dbo].[Products] AS [t0]
WHERE NOT ([t0].[CategoryID] IN (@p0, @p1))

posted @ 2009-12-29 09:55  阳光追梦  阅读(14366)  评论(5编辑  收藏  举报
/*快速评论*/ #div_digg { position: fixed; bottom: 10px; right: 15px; border: 2px solid #ECD7B1; padding: 10px; width: 140px; background-color: #fff; border-radius: 5px 5px 5px 5px !important; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); } /** 不知道为什么页面加载完成时还读不到div_digg。可能也是动态生成的。 所以这里只能用定时器 不断的读取,当读取到了再给它动态添加快捷按钮 **/ //自定义 定时器[当元素加载完成是执行回调函数] function customTimer(inpId,fn) { if ($(inpId).length) { fn(); } else { var intervalId = setInterval(function () { if ($(inpId).length) { //如果存在了 clearInterval(intervalId); // 则关闭定时器 customTimer(inpId,fn); //执行自身 } }, 100); } } //页面加载完成是执行 $(function () { customTimer("#div_digg", function () { var div_html = "
\ 关注\  | \ 顶部\  | \ 评论\
"; $("#div_digg").append(div_html); //tbCommentBody }); });