除了 Lambda 表达式还过滤重复项
Except Lambda expression also filters duplicates
如果我正确理解 Except lambda 的行为,它应该 return 所有项目都出现在 col1 而不是 col2 中。
在下面的示例中,它应该 returns 具有空 ID 的两个项目。
问题:return只有一个 ID 为空的项目...
var col2 = new List<StaffSkill>
{
new StaffSkill { SkillID = "12" },
};
var col1 = new List<StaffSkill>
{
new StaffSkill { SkillID = "12" },
new StaffSkill { SkillID = null },
new StaffSkill { SkillID = null },
};
var res = col1.Except(col2);
if (res.Any())
{ }
StaffSkill 在哪里
public class StaffSkill
{
public string SkillID { get; set; }
protected bool Equals(StaffSkill other)
{
return string.Equals(SkillID, other.SkillID, StringComparison.OrdinalIgnoreCase);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((StaffSkill) obj);
}
public override int GetHashCode()
{
return (SkillID != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(SkillID) : 0);
}
}
是否有对此行为的解释。似乎 Except lambda 也过滤了 col1 集合中具有相同 ID 的项目...
我错过了什么?
谢谢,
塞巴斯蒂安
这似乎是该方法的工作原理。请参阅 msdn documentation 中的评论部分,尽管我同意应该在文档中更清楚地说明它
为了获得重复项,我会这样打电话:
var res = col1.Where(q => !col2.Contains(q))
不过我想在某些情况下它可能会慢一些。
如果我正确理解 Except lambda 的行为,它应该 return 所有项目都出现在 col1 而不是 col2 中。 在下面的示例中,它应该 returns 具有空 ID 的两个项目。 问题:return只有一个 ID 为空的项目...
var col2 = new List<StaffSkill>
{
new StaffSkill { SkillID = "12" },
};
var col1 = new List<StaffSkill>
{
new StaffSkill { SkillID = "12" },
new StaffSkill { SkillID = null },
new StaffSkill { SkillID = null },
};
var res = col1.Except(col2);
if (res.Any())
{ }
StaffSkill 在哪里
public class StaffSkill
{
public string SkillID { get; set; }
protected bool Equals(StaffSkill other)
{
return string.Equals(SkillID, other.SkillID, StringComparison.OrdinalIgnoreCase);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj)) return false;
if (ReferenceEquals(this, obj)) return true;
if (obj.GetType() != this.GetType()) return false;
return Equals((StaffSkill) obj);
}
public override int GetHashCode()
{
return (SkillID != null ? StringComparer.OrdinalIgnoreCase.GetHashCode(SkillID) : 0);
}
}
是否有对此行为的解释。似乎 Except lambda 也过滤了 col1 集合中具有相同 ID 的项目...
我错过了什么?
谢谢, 塞巴斯蒂安
这似乎是该方法的工作原理。请参阅 msdn documentation 中的评论部分,尽管我同意应该在文档中更清楚地说明它
为了获得重复项,我会这样打电话:
var res = col1.Where(q => !col2.Contains(q))
不过我想在某些情况下它可能会慢一些。