#c# #.net #linq
#c# #.net #linq
Вопрос:
У меня небольшая проблема, из приведенного ниже кода сначала мы находим хостельстопы с идентификатором, именем хостеля, временем, затем мы берем wardenkduty с именем службы, tasksStart
теперь я хочу проверить, существует ли hostelStops-Имя хоста в списке задач-taskStart
var hostelStops = (from item in Hostel.Where(tn =gt; tn.HostelNumber == hostelNumber).SelectMany(x =gt; x.Hostels) select new { Id = item.Id, hostelName = hostelName.Single(p =gt; p.Id == item.hostelId).SymbolicName, InTime = item.InTimeTime }).ToList(); var taskList = (from row in filteredWardenDuty select new { dutyName = row.DutyName, taskStart = row.WardenTasks.Select(x =gt; x.Context.Start.PlaceId) }).ToList();
итак, я написал ниже код
var isExist = from row in taskList select new { task = row.taskStart.Contains((from item in hostelStops select item.hostelName )) };
но, получив ошибку как
Ошибка CS1929 «IEnumerable» не содержит определения для «Содержит», а лучший метод расширения перегружает » Расширения памяти.Содержитlt;IEnumerablegt;(ReadOnlySpanlt;IEnumerablegt;lt;IEnumerablegt;, IEnumerable)’ требуется приемник типа » ReadOnlySpanlt;IEnumerablegt;lt;IEnumerablegt;»
Комментарии:
1. не могли бы вы, пожалуйста, отредактировать свой вопрос относительно фрагментов кода. Это не совсем читабельно. Может быть, ты скучаешь
using System.Linq;
…?2. спасибо за ответ, но система. Linq существует в верхней части файла класса
3. вы уверены, что у вас есть список с именем
stops
? разве так не должно бытьhostelStops
?4. на самом деле в списке задач присутствуют значения hostelStops, но во время разработки мы получили эту ошибку
Ответ №1:
Вы не можете этого сделать someCollection.Contains(otherCollection)
, вы должны это сделать someCollection.Any(item =gt; otherCollection.Contains(item))
(по-английски: «содержится ли какой-либо предмет из этой коллекции в этой коллекции»), поэтому что-то вроде:
row.taskStart.Any(ts =gt; (from item in hostelStops select item.hostelName).Contains(ts));
Возможно, было бы более эффективно превратить ваши хост-магазины в хэш-набор:
var hs = (from item in hostelStops select item.hostelName).ToHashSet(); ... row.taskStart.Any(ts =gt; hs.Contains(ts));
Вам не было ясно, какие это типы; это будет работать только в том случае, если две коллекции имеют один и тот же базовый тип (например, string) или тип, который можно правильно сравнивать, даже если это разные экземпляры, для которых вам, возможно, придется написать пользовательский компаратор или пару переопределений Equals/GetHashCode