Я использую Linq для выбора и обработки строк из текстового файла. Мой txtfile состоит из двух столбцов, разделенных символом «|». Файл содержит следующее:
HAbbe | 11
GABBOT | 22 * 1004 *
DABDA | 33
RAchant | 44
РАДА | 55
DABDA | 66
Вы заметите, что строки 3 и 6 имеют дублированный идентификатор (столбец 1). Я хочу использовать linq, чтобы сначала прочитать опубликованный текстовый файл, найти дубликат (и сообщить об этом), а затем я бы хотел выбрать из запроса 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);
}
Это все нормально и дает мне правильные результаты. Я сейчас ищу, чтобы выбрать все строки, кроме 2 дублированных строк из текстового файла. Я написал следующее утверждение 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 является полный список из текстового файла. Может ли кто-нибудь объяснить, что я делаю не так здесь ...
Заранее спасибо