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

Как сопоставить столбец, который имеет несколько целочисленных значений, разделенных запятыми в linq?


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

У меня есть список, в котором у меня есть столбец с несколькими целыми значениями (разделенными запятыми).
eg:
------------------------
| Program | Module      |
------------------------
| I       | 1,2,3       |
------------------------
| II      | 2, 3        |
------------------------
| III     | 1,3         |
------------------------


Теперь предположим, что я хочу выбрать программы, где модуль равен 2.

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

int sid = 2;
IEnumerable<int> ids = Program.All.FindAll( item => sid.contains(item.Module.Split(',').Select(s => (int)s) // getting error: cannot convert string to int


Может ли кто-нибудь мне помочь?


Спасибо

F-ES Sitecore

Это то, что происходит, когда вы неправильно структурируете свою базу данных. Правильное решение-перепроектировать базу данных, чтобы использовать отношения "один ко многим".

abdul subhan mohammed

есть какое-нибудь решение для этого?

F-ES Sitecore

Перепроектируйте таблицы базы данных, найдите в google, как реализовать отношение "один ко многим" в SQL, а затем найдите в google, как использовать отношение "один ко многим" в LINQ.

abdul subhan mohammed

любое решение без перепроектирования базы данных?

1 Ответов

Рейтинг:
1

Karthik_Mahalingam

попробовать это

List<Prog> lst = new List<Prog> ();
     lst.Add( new Prog(){ Program_ = "I", Module =  "1,2,3"});
     lst.Add( new Prog(){ Program_ = "II", Module =  "2,3"});
     lst.Add( new Prog(){ Program_ = "III", Module =  "1,3"});


     int find = 2;

   IEnumerable<string> programs =   lst.Where(k => k.Module.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(a => Convert.ToInt32(a)).Contains(find)).Select(x => x.Program_).ToList();


public class Prog
  {
      public string Program_ { get; set; }
      public string Module { get; set; }
  }