Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将循环转换为linq表达式_C# - Fatal编程技术网

C# 将循环转换为linq表达式

C# 将循环转换为linq表达式,c#,C#,我有两张单子。请参见下面的我的代码: public class Person { public string Name { get; set; } public int ItemOneId { get; set; } public int ItemTwoId { get; set; } } public class Item { public int ItemOneId { get; set; } public int ItemTwoId { get;

我有两张单子。请参见下面的我的代码:

public class Person
{
    public string Name { get; set; }
    public int ItemOneId { get; set; }
    public int ItemTwoId { get; set; }
}

public class Item
{
    public int ItemOneId { get; set; }
    public int ItemTwoId { get; set; }
}

List<Person> persons = new List<Person>
{
    new Person
    {
        Name = "a",
        ItemOneId = 11,
        ItemTwoId = 23
    },
    new Person
    {
        Name = "c",
        ItemOneId = 11,
        ItemTwoId = 56
    },
    new Person
    {
        Name = "d",
        ItemOneId = 109,
        ItemTwoId = 59
    }
};

List<Item> items = new List<Item>
{
    new Item
    {
        ItemOneId = 11,
        ItemTwoId = 56
    },
    new Item
    {
        ItemOneId = 1,
        ItemTwoId = 2
    }
};
公共类人物
{
公共字符串名称{get;set;}
public int ItemOneId{get;set;}
公共int ItemTwoId{get;set;}
}
公共类项目
{
public int ItemOneId{get;set;}
公共int ItemTwoId{get;set;}
}
名单人员=新名单
{
新人
{
Name=“a”,
ItemOneId=11,
ItemTwoId=23
},
新人
{
Name=“c”,
ItemOneId=11,
ItemTwoId=56
},
新人
{
Name=“d”,
ItemOneId=109,
ItemTwoId=59
}
};
列表项=新列表
{
新项目
{
ItemOneId=11,
ItemTwoId=56
},
新项目
{
ItemOneId=1,
ItemTwoId=2
}
};
我想从人员列表中获取所有人员,其中ItemOneId和ItemTwoId在项目列表中不存在。我有以下代码-是更好的解决方案吗

List<Person> result = new List<Person>();
foreach(Person person in persons)
{
    if (!items.Any(x => x.ItemOneId == person.ItemOneId && x.ItemTwoId == person.ItemTwoId))
    {
        result.Add(person);
    }
}
列表结果=新列表();
foreach(一人一人)
{
如果(!items.Any(x=>x.ItemOneId==person.ItemOneId&&x.ItemTwoId==person.ItemTwoId))
{
结果:增加(人);
}
}

或者可能没有其他解决方案?

下面的代码应该可以工作

List<Person> result = new List<Person>();
foreach(Person person in persons)
{
    if (!items.Any(x => x.ItemOneId == person.ItemOneId && x.ItemTwoId == person.ItemTwoId))
    {
        result.Add(person);
    }
}
var result = persons.Where(p => !items.Any(x => x.ItemOneId == p.ItemOneId && x.ItemTwoId == p.ItemTwoId);