好吧,我写了下面LINQ to Entities
查询(足够接近下方显示我的C#查询)LINQ到过滤嵌套列表
var itemss = filteredstudents
.Where(x => x.SubjectTypes.Any(y => y.SubjectItem.Any(z => z.Name == value1))).ToList();
还是有点问题,因为当SubjectItem类型有两个元素,其中一人用value1
匹配。它仍然返回两者。它应该只返回匹配的记录。我知道问题是与任何但不知道Any
取代什么?
foreach (StudentDTO student in filteredstudents)
{
bool valid = true;
foreach (SubjectTypes subjectType in student.SubjectTypes)
{
string value1 = subjectType.SubjectItem.Select(x => x.value1).First();
Guid StId = _context.Items.Where(x => x.Name == value1).FirstOrDefault();
if (StId != null)
valid = true;
else
{
valid = false;
_log("create log");
}
}
if (valid)
filteredstudentsWithUnits.Add(student);
}
采样输入
{"Name":"ABC",
"Age":12,
,"SubjectTypes":
[
{"Id":"1","Description":""Description","SubjectItem":[{"Id":"1","Marks":12,"Name":"aaa"}]},
{"Id":"1","Description":""Description","SubjectItem":[{"Id":"1","Marks":12,"Name":"aaa"}]},
{"Id":"1","Description":""Description","SubjectItem":[{"Id":"1","Marks":12,"Name":"bbb"}]}
]
}
期望输出
{"Name":"ABC",
"Age":12,
,"SubjectTypes":
[
{"Id":"1","Description":""Description","SubjectItem":[{"Id":"1","Marks":12,"Name":"aaa"}]},
{"Id":"1","Description":""Description","SubjectItem":[{"Id":"1","Marks":12,"Name":"aaa"}]},
]
}
请分享'SubjectTypes'和'SubjectItem' – Jacky
之间的关系也将是有益的,如果你发布的示例数据和预期输出 –
你能解释一下在多个项目的情况下会发生什么?它应该只会返回,如果有一个项目,它匹配,如果是的话,那么你这样做的问题是什么(似乎没有比你在这里的其他东西更难) – Chris