gpt4 book ai didi

c# - Linq - 使用 not "IN"运算符从文本文件中选择非重复行

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:33 25 4
gpt4 key购买 nike

我正在使用 Linq 从文本文件中选择和处理行。我的 txt 文件是由管道字符“|”分隔的两列。该文件包含以下内容:

哈贝|11
卡博特|22
达布达|33
RAchant|44
雷达|55
达布达|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);
}

这一切都很好,给了我正确的结果。我现在希望从文本文件中选择除 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 的结果是来自文本文件的完整列表。有人可以解释我在这里做错了什么......提前致谢

最佳答案

group 查询中,grouped 变量也是包含组中项目的 IEnumerable

因此,你可以这样写:

var nonDuplicates = from line in query1
group line by line.ID into grouped
where grouped.Count() == 1
select grouped.First()

关于c# - Linq - 使用 not "IN"运算符从文本文件中选择非重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com