例如,我有一个Excel单元格列表
List<Cell> cells = new List<Cell>
{
new Cell("4"),
new Cell("Hez"),
new Cell("Method"),
new Cell("4"),
new Cell("Val"),
new Cell("Method"),
}
字符串
我需要得到唯一的单元格(在本例中是Cell(“瓦尔”),Cell(“Hez”)),所以Distinct()不适合我。
我找到了这个解决方案,但它根本不返回任何数据
var uniqueTest = allData.GroupBy(cell => cell)
.Where(group => group.ToString().Count() == 1)
.Select(group => group.Key);
型
我认为问题是Cell对象不包含任何比较方法(这是IronXl库),所以这就是我在这里使用ToString()的原因。
但是我还不太理解LINQ,所以任何解释或建议都很感激。
备注:
我需要得到一个单元格的列表,但是要有唯一的值。
4条答案
按热度按时间e4yzc0pl1#
步骤1:按值对单元格进行分组。
步骤2:只保留大小为1的组。
步骤3:从每组中取出唯一的物品。
字符串
z3yyvxxp2#
这应该很简单
让我们计算数字4的值是键..那么你的linq应该是这样的
字符串
lkaoscv73#
如果我理解正确(我不确定我是否理解正确),您可以使用
.First()
或更健壮的.Single()
字符串
在这个例子中,我假设
c.ToString()
将给予单元格的值。否则它可能是类似c.Value
或其他的值。OrDefault
的变体有很多种。查看这篇文章了解它们的区别; https://www.c-sharpcorner.com/blogs/singleordefault-vs-firstordefault-in-linq-query1jslywgbw4#
如果你把Cell这样分类的话
字符串
这将得到一个唯一的列表:
型
在这种情况下,只会添加第一个包含“Method”和“4”的单元格。“!”和“.Any”是基本部分。