2016-12-04 2 views
0

У меня есть две таблицы LookUpCodes и LookUpValues ​​они определены, как показано ниже:Простой запрос Linq, который соединяет две таблицы и возвращает коллекцию

public partial class LookUpCodes 
{ 
    public int Id { get; set; } 
    public int? CodeId { get; set; } 
    public string Code { get; set; } 
    public string Description { get; set; } 
} 



public partial class LookUpValues 
{ 
    public int Id { get; set; } 
    public int CodeId { get; set; } 
    public string CodeValue { get; set; } 
    public bool? IsActive { get; set; } 
} 

Каждый LookUpCode может иметь несколько значений, связанных с ним. Я хочу передать код и вернуть связанный список значений.

Это, вероятно, общий вопрос, так как я видел это повсюду, я не ищу ответа как такового, если кто-то может просто объяснить, как построить правильный запрос, который я бы обязал.

Вот что я сделал до сих пор:

public IEnumerable<LookUpValues> GetValuesByCode(string cd) 
{ 
    var query = from code in _context.LookUpCodes 
       join values in _context.LookUpValues on code.CodeId equals values.CodeId 
       where code.Code == cd 
       select new { LookUpValues = values }; 
    return (IEnumerable<LookUpValues>) query.ToList(); 
} 

ответ

0

Вы очень близки к тому, что вы ищете:

public IEnumerable<LookUpValues> GetValuesByCode(string cd) 
{ 
    var query = from code in _context.LookUpCodes 
       join values in _context.LookUpValues 
       on code.CodeId equals values.CodeId 
       where code.Code == cd 
       select values; 

    return query; 
} 

Так как вы написали join, я предполагаю, что у вас есть понял, как это работает. Однако давайте вернуться к нему:

from a in listA 
join b in listB 
on a.commonId equals b.commonId 

В приведенном выше фрагменте кода мы присоединяемся содержимое listA с содержанием listB и мы основываем свои join на существующие в пунктах обоих списках в commonId собственности. По-видимому, пара a и b, которые соответствуют критерию join, она могла бы составить один из возможных результатов.

Затем применяется предложение where по итогам join. The joined items that pass the, где filter is the new result. Even at this point the results is still pairs of a and b`.

Последний проект, используя ключевое слово select для каждой пары результатов для нового объекта. В вашем случае для каждой пары code и values, которые прошли также фильтр where, вы возвращаете только values.

+0

Благодарим вас за быстрый ответ и, действительно, хорошее объяснение. У меня есть другой вопрос: как я могу упорядочить значения по убыванию порядка свойства CodeValue? –

+0

Добро пожаловать. Вы можете добиться этого так же просто, как вы уже описали его. Незадолго до того, как в заявлении select поместите эти 'порядковые значения по убыванию ' – Christos

+0

Благодарим вас за образование. Надеюсь, это тоже поможет другим. –

Смежные вопросы