int[] num0 = { 28, 32, 14 };
int[] num1 = {14,15,16};
如上,我想把num0中不包含於num1的元素都找出來,其正確結果應該是28,32。早上看到原來linq可以寫多個from字句,之后就想到了這樣的寫法:
int[] num0 = { 28, 32, 14 };
int[] num1 = {14,15,16};
var qq = from n1 in num0
from n2 in num1
where n1 != n2
select n1;
結果,我錯了,調試了一下才知道自己想當然了。結果如下:

總共進行了3 * 3,9次比較,那個語句把所有成立的n1都選進去了。
所以還是老老實實用contains好了
int[] num0 = { 28, 32, 14 };
int[] num1 = { 14, 15, 16 };
var bb = from n1 in num0
where num1.Contains(n1) == false
select n1;
另外,推薦一個工具:LinqPad,我的這個例子就是用linqPad 調試的,上面那個結果顯示使用了語句:qq.Dump();
網址:http://www.linqpad.net/
下載:
for .net 3.5:http://www.linqpad.net/GetFile.aspx?LINQPad.exe
for .net 4.0:http://www.linqpad.net/GetFile.aspx?LINQPad4.zip
這個工具還不錯,自帶了許多例子,還可以寫入自己的語句運行。
另外,微軟官方的Official Visual Studio 2008 C# Samples里面的LINQ - Sample Queries也是不錯的,帶了許多例子,幾乎所有的linq特性都有,還可以執行。
網址:http://code.msdn.microsoft.com/csharpsamples
LINQ - Sample Queries 截圖:

2012年1月13日16:56:23 更新:
后來又找到了Except、Intersect、Union、Distinct等方法,終於可以排除一個集合中那些某個屬性的值存在於另一個幾個中元素屬性的方法了。
按照Example上的例子,大概可以如此實現:
public void Linq53() {
List<Product> products = GetProductList();
List<Customer> customers = GetCustomerList();
var productFirstChars =
from prod in products
select prod.ProductName[0];
var customerFirstChars =
from cust in customers
select cust.CompanyName[0];
var productOnlyFirstChars = productFirstChars.Except(customerFirstChars);
Console.WriteLine("First letters from Product names, but not from Customer names:");
foreach (var ch in productOnlyFirstChars) {
Console.WriteLine(ch);
}
}
