好的,我有这三个清单。
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;
}
答案 0 :(得分:1)
我认为这就是你想要的。
foreach(Request request in requests)
{
if(!request.Qualities.Except(volunteer.Qualities).Any())
acceptedRequestsByQuality.Add(request)
}
这假设Qualities
中的项目类型正确覆盖了Equals
和GetHashCode
方法,因此比较它们实际上会有效。
答案 1 :(得分:0)
您没有填充新列表。将您的发现添加到其中:
var b = volunteer.Qualities.Except(request.Qualities);
if (b.Count() == 0)
acceptedRequestsByQuality.Add(request);
编辑:
感谢juharr指出逻辑错误。看看他的答案是否有一个更整洁的解决方案(可能还有正确的逻辑)。