我有一个对象列表.这些对象由一个自定义类组成,该类基本上包含两个字符串字段String1和String2.
我需要知道的是,如果这些字符串中的任何字符串在该列表中重复.所以我想知道是否objectA.String1 == objectB.String1,或ObjectA.String2 == ObjectB.String2,或ObjectA.String1 == ObjectB.String,或ObjectA.String2 == ObjectB.String1.
另外,我想将包含重复字符串的每个对象标记为具有重复的字符串(HasDuplicate对象上有bool ).
因此,当复制检测运行时,我想简单地在列表上进行操作,如下所示:
foreach (var item in duplicationList)
if (item.HasDuplicate)
Console.WriteLine("Duplicate detected!");
Run Code Online (Sandbox Code Playgroud)
这似乎是用LINQ解决的一个很好的问题,但我不能为我的生活找出一个好的查询.因此我使用'good-old'foreach解决了它,但我仍然对LINQ版本感兴趣.
我设法从对象的复杂结构中做出选择,但只有在foreach的帮助下,我怎样才能避免这个foreach并解决我的问题,只需使用LINQ?
var product = new List<ProductCrp>
{
new ProductCrp {
Strucutre = new StructureItem() {
CheckList = new CheckList() {
Checks = new List<Check>
{
new Check { NumberAsInt = "149" },
new Check { NumberAsInt = "260" },
new Check { NumberAsInt = null }
}
}
}
},
new ProductCrp {
Strucutre = new StructureItem() {
CheckList = new CheckList() {
Checks = new List<Check>
{
new Check { NumberAsInt = "261" },
new Check { NumberAsInt = …Run Code Online (Sandbox Code Playgroud) 我正试图测试LINQ能走多远.我想要实现的是具有单个表达式而不是循环的对象列表上的属性赋值.我想获取listA中的所有项目并更新IsMatched属性,但只有在listB中有相应的项目(这是一个不同的类型)时,这可能吗?
示例代码:
public struct A { public int x; public bool IsMatched;}
public struct B {public int x;}
static void Main(string[] args)
{
List<A> listA = new List<A>();
List<B> listb = new List<B>();
listA.Add(new A() { x=1});
listA.Add(new A() { x=2});
listA.Add(new A() { x=3});
listb.Add(new B() { x=2});
listb.Add(new B() { x=3});
listA = listA.SelectMany(fb => listb, (fb, j) => new {a=fb, b=j})
.Where (anon => anon.b.x == anon.a.x).Select(anon => new A() {x=anon.a.x, IsMatched=true})
.ToList(); // this …Run Code Online (Sandbox Code Playgroud)