比较两个列出它们的值并在它们相等时返回值

时间:2016-04-26 13:22:08

标签: c# list compare

好的,我有这三个清单。

List<Request> requests = db.GetRequests();
List<Request> acceptedRequestsByQuality = new List<Request>();
Volunteer.Qualities;

我想比较志愿者的质量和请求列表中请求对象中给出的质量。当志愿者质量列表包含request.qualities中的所有质量时,我想将这些请求添加到acceptedRequestsByQity列表并返回它们。

我有以下代码,但我似乎无法让它工作,我不知道该放在foreach:S

public List<Request> GetRequestForUser(Account account)
{
    var hasall = true;
    bool accepted = false;
    List<Request> requests = db.GetRequests();
    List<Request> acceptedRequestsByQuality = new List<Request>();
    String type = account.GetType().ToString();
    switch (type)
    {
        //Creates a new tab for all tabs that the account needs.
        case "S21M_B_Participation_Forms.Volunteer":
            Volunteer volunteer = (Volunteer) account;
            foreach(Request request in requests)
            {
                var b = volunteer.Qualities.Intersect(request.Qualities);
            }
            break;
    }

    return acceptedRequestsByQuality;
}

2 个答案:

答案 0 :(得分:1)

我认为这就是你想要的。

foreach(Request request in requests)
{
    if(!request.Qualities.Except(volunteer.Qualities).Any())
        acceptedRequestsByQuality.Add(request)
}

这假设Qualities中的项目类型正确覆盖了EqualsGetHashCode方法,因此比较它们实际上会有效。

答案 1 :(得分:0)

您没有填充新列表。将您的发现添加到其中:

var b = volunteer.Qualities.Except(request.Qualities);
if (b.Count() == 0)   
   acceptedRequestsByQuality.Add(request);

编辑:

感谢juharr指出逻辑错误。看看他的答案是否有一个更整洁的解决方案(可能还有正确的逻辑)。