abdul subhan mohammed Ответов: 2

Как сравнить один элемент списка с другим элементом списка в C# linq?


Привет Ребята,

У меня есть два списка.

один список предназначен для центра, где у меня есть города(ID) как элемент (разделенный запятыми).

другой список предназначен для сеанса, где у меня есть только город(ИД) предмета.

теперь я хочу сравнить сессионный город с центральными городами.

сессия будет иметь только один город, например: Хайд.

Где,
В центре будут города, такие как: Дели, Мумбаи, Хайд...

я хочу сравнить сессию, где сессия-город = = центр-город

Что я уже пробовал:

я попробовал использовать contains, findall, where, select...
SessionController.Instance.All.FindAll(
item => 
item.ProgramID == programId && /* Resource Path : Program */
//item.SectorID.Contains(item.SectorID) && /* Resource Path : Sector */
//item.CenterGroup.CenterIDs.Split(',').ToList().Contains(center.ID.ToString())
item.CityID==cityIds)//error.
Select(item => new { id = item.ID, value = item.NameEN })


плз, Ребята, помогите мне, как я могу сравнивать.

Спасибо

Karthik_Mahalingam

что такое cityIds? и пункт.CityID

abdul subhan mohammed

cityid содержит список идентификаторов города и где item.cityid содержит один cityid

Maciej Los

Что это за данные CityId (int? string?)?

2 Ответов

Рейтинг:
7

OriginalGriff

Если вы имеете в виду что-то вроде:

List<string> centers = new List<string>();
centers.Add("123,456,789");
centers.Add("666,333,999");
List<string> session = new List<string>();
session.Add("456");
session.Add("666");
session.Add("888");
Тогда попробуй:
var found = session.Where(s => centers.Where(c => c.Split(',').Contains(s)).Count() != 0);


Рейтинг:
2

Maciej Los

На основе примера, приведенного OriginalGriff[^], я бы поделился другим решением, которое использует Where + Any Методы Linq:

var found = session
    .Where(s => centers
        .SelectMany(c => c.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries))
        .Any(z=>z==s));


В случае, если CityId это тип Int, вам нужно преобразовать разделенную строку в целое число:
.Any(z=>Convert.ToInt32(z)==s));


Для получения более подробной информации, пожалуйста, смотрите:
Строка.Метод Разделения (Char [], StringSplitOptions) (System)[^]
Как разобрать строку, используя строку.Split (Руководство По Программированию На C# )[^]
Перечислимый.Любой(TSource) Для (Интерфейс IEnumerable(Метод), Функция(Метод Логических)) (Системы.В LINQ)[^]