Выберите таблицу, в которой есть записи, существующие в другой таблице, используя LINQ

#c# #sql #asp.net-mvc #linq

#c# #sql #asp.net-mvc #linq

Вопрос:

Я хочу получить записи в таблице граждан, которые имеют запись в таблице заданий, используя LINQ. Может кто-нибудь, пожалуйста, перевести это в LINQ? Спасибо!

 SELECT * FROM JOB_MSTR j where j.citizen_id IN (SELECT c.citizen_id from CITIZEN_MSTR c);
  

Комментарии:

1. Я пытаюсь Any , но не могу завершить выполнение инструкции : var citizens = from j in _odb.JOB_MSTR.Any(j => j.EMP_ID == (_odb.CITIZEN_MSTR .....)) . Это незакончено, мне сейчас так стыдно, ха-ха

2. Прочитайте о Contains ключевом слове для LINQ blogs.msdn.microsoft.com/alexj/2009/03/25 /…

Ответ №1:

Это может сделать это

 ctx.JOB_MSTR.Where(x => ctx.CITIZEN_MSTR.Any(y => y.citizen_id == x.citizen_id))
  

Комментарии:

1. я использовал ctx в качестве имени varialbe для контекста вашего entity framework using (EntityFoo ctx = new EntityFoo()){}

2. Мне нужен формат, подобный @lateshtclick’s ( from j in ctx.JOB_MSTR ) , так как я помещу это в переменную и верну ее для просмотра

3. Я думаю, что она все еще неполная, потому что мне все еще нужно поместить ее в a Model в конце LINQ, например: select new CitizenModel { id = c.CITIZEN_ID, fullName = c.FNAME " " _ c.LNAME,.... }; Вот почему я путаюсь с ответом, особенно в x и y. Я не уверен, относится ли x к JOB_MSTR и y к CITIZEN_MSTR . Я также не вижу делярации псевдонима следующим образом: from j in ctx.JOB_MSTR или c in ctx.CITIZEN_MSTR

4. Спасибо @fubo! Кстати, я объявил это как var result , bec. это то, что я сделал со всеми своими LINQ s. Просто было довольно странно кодировать его таким образом, потому что я привык кодировать LINQ так: from j in ctx.JOB_MSTR.. . Во всяком случае, это c относится к JOB_MSTR , но как мне получить доступ CITIZEN_MSTR к столбцам s? Я не могу сделать это, используя переменные x и y. FNAME и LNAME являются одним из CITIZEN_MSTR столбцов

5. Я думаю, что это другой вопрос, ваш первоначальный вопрос был SELECT * не о создании нового CitizenModel , и вы также не запрашивали синтаксис запроса, который является старомодным imo msdn.microsoft.com/en-gb/library/bb397947.aspx

Ответ №2:

 var result = ( from j in ctx.JOB_MSTR 
                       join c in ctx.CITIZEN_MSTR
                      on j.citizen_id equals c.citizen_id 
                      select j).ToList();
  

Комментарии:

1. это больше похоже SELECT j.* FROM JOB_MSTR j join CITIZEN_MSTR c on j.citizen_id = c.citizen_id; на то, что не возвращает уникальные строки JOB_MSTR

2. @fubo но мне нужен LINQ этот формат, поэтому я могу поместить его в переменную. Можете ли вы отредактировать свой ответ? Спасибо!