Ok, я написал ниже 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, но не уверен 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