HRVP Ответов: 1

Как запросить linq для списка в состоянии where?


у меня есть такой метод
public List<cil> Accounts( List<string> CL)
{
List<cil> cil = new List<cil>();
cil =(from CI in context.CIs join V1 in context.V1 on CI.Id equals V1.Id where CL.Contains(CI.ID)
select new CIL()
{
Name = V1.Name
}).ToList();
}
return cil;
}
мой параметр метода будет возвращать Список CL как показано ниже
1111
2222
В моей БД имея
КИ таблица, имеющая
ИДЕНТИФИКАТОР
Строка 1: 1111
Строка 2: 2222


теперь выше запрос cil возвращает null
На самом деле его предполагают вернуть
1111
2222

упаковать мой параметр метода вернет список CL, как показано ниже только одна строка
1111
его возвращение в один ряд
то есть cil возвращается 1111
Примечание: все же Id зарегистрирован на состояние равняется

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

публичный список учетных записей & lt;cil> ( Список<string> CL)
{
List<cil> cil = новый список<cil>();
КСС =(с КИ в контексте.СНГ присоединяйтесь к V1 в context.V1 на CI.Id равен V1.ИД, где СЛ.Содержит(ки.Идентификатор)
выберите новый CIL()
{
Название = В1.Название
}).Толист();
}
вернуться КСС;
}

Любые ответы будут оценены по достоинству.

1 Ответов

Рейтинг:
4

Andy Lanng

Have you tried using the IEnumerable extensions instead?  I find it much easier:

<pre lang="c#">public List<cil> Accounts( List<string> CL){

  var cil= context.CIs
               .Join(
                  context.V1,
                  ci=>ci.Id,
                  v1=>v1.Id
                  (ci,v1)=>new{ci, v1})
               .Where(a => CL.contains(a.ci.ID))
               .Select(a=>a.v1.Name)
               .ToList();
               
}


Затем вы можете разбить запрос, чтобы увидеть, что не так.

Кроме того, если этот "контекст" является entity framework, то запрос не выполняется до тех пор, пока вы не вызовете ToList().

Взгляните на это:
public List<cil> Accounts( List<string> CL){

  var query= context.CIs
               .Join(
                  context.V1,
                  ci=>ci.Id,
                  v1=>v1.Id
                  (ci,v1)=>new{ci, v1})
               .Where(a => CL.contains(a.ci.ID))
               .Select(a=>a.v1.Name);
  
  var queryString = query.ToString();

  return query.ToList(); 
}



Эта строка запроса будет SQL, который будет выполняться в БД (без переменных). Взгляните и убедитесь, что ваша логика где-то ошибочна. Может быть, соединение неверно или данные не такие, как вы ожидаете ?

Надеюсь, это поможет
Энди