2
我正在使用Linq從文本文件中選擇和處理行。我的txtfile是由管道字符「|」分隔的兩列。該文件包含以下內容:Linq - 使用非「IN」運算符從文本文件中選擇非重複行
HAbbe | 11
GABBOT | 22
DABDA | 33
RAchant | 44
RADA | 55
DABDA | 66
你會發現,3號線和線6有一個重複的ID(第1列)。我想用linq來初步讀取發佈的txt文件找到重複(並報告它),然後我想從ling查詢中只選擇不重複的行。以下是我的:
StreamReader srReader = new StreamReader(fUpload.PostedFile.InputStream);
var query1 =
from line in srReader.Lines()
let items = line.Split('|')
select new UploadVars()
{
ID = items[0],
Number = items[1]
};
var GroupedQuery = from line in query1
group line by line.ID into grouped
where grouped.Count() > 1
select new {
ID = grouped.Key,
MCount = grouped.Count()
};
StringBuilder sb = new StringBuilder();
foreach (var item in GroupedQuery)
{
sb.AppendFormat("The following external ID's occur more than once and have not been processed:<br> {0}. Duplicated {1} times.", item.ID, item.MCount);
}
這是一切都好,並給我正確的結果。我現在正在尋找除文本文件中的兩個重複行外的所有行。我已經由以下LINQ語句,但由於某種原因,我有沒有運氣:
//lets start at the beginnnig of the the posted filestream
fUpload.PostedFile.InputStream.Position = 0;
srReader = new StreamReader(fUpload.PostedFile.InputStream);
var query2 = from line in srReader.Lines()
let items = line.Split('|')
select new UploadVars()
{
ID = items[0],
Number = items[1]
};
var qryNoDupedMems = from Memb in query2
where !(from duped in GroupedQuery
select duped.ID)
.Contains(Memb.ID)
select Memb;
qryNoDupedMems的結果是從文本文件的完整列表。有人能解釋我做錯了什麼在這裏... 由於提前
感謝您的及時幫助與此有關。我能夠檢索所需的結果。你不知道爲什麼Not IN(!)操作符沒有返回正確的結果? – Hawkesy 2010-03-15 15:14:51