2016-07-27 3 views
0

У меня есть некоторая SQL таблица, мне нужно запросить информацию из моего текущего запроса, который возвращает один список столбцов:Linq Multiple играя

from f in FactSales 
where f.DateKey == 20130921 
where f.CompanyID <= 1 
join item in DimMenuItems 
on f.MenuItemKey equals item.MenuItemKey 
join dmi in DimMenuItemDepts 
on item.MenuItemDeptKey equals dmi.MenuItemDeptKey 
group f by dmi.MenuItemDeptKey into c 
select new { 
Amount = c.Sum(l=>l.Amount) 
} 

Это возвращает данные, которые я хочу, и она группирует правильно третьей таблица Я присоединяюсь, но я не могу получить столбец описания из таблицы dmi. Я постарался добавить поле

Description = dmi.Description 

но он не работает. Как я могу получить данные из третьей таблицы в новый элемент, который я создаю с помощью этого выражения? Большое спасибо за любую помощь.

+1

Вам необходимо сгруппировать по описанию, чтобы добавить его к вашему выбору. –

ответ

1

Во-первых, вы используете Entity Framework ПОЛНОСТЬЮ НЕПРАВИЛЬНО. Linq не является SQL.

Вы не должны использовать join. Вместо этого вы должны использовать ассоциации.

Так вместо этого, ваш запрос должен выглядеть ...

from sale in FactSales 
where sale.DateKey == 20130921 
where sale.CompanyID <= 1 
group sale by sale.Item.Department into c 
select new 
{ 
    Amount = c.Sum(l => l.Amount) 
    Department = c.Key 
} 

Следуя Ассоциаций, вы автоматически неявно присоединения.

Вы не должны группироваться по идентификатору «таблицы», а по фактической «строке» или по языку объекта (это то, что вы должны использовать в EF, поскольку смысл существования ORM для преобразования DB в Object), заключается в том, что вы должны группировать «сущность», а не «ключ объекта».

EF уже знает, что ключ уникален для объекта.

Ключевое слово группировки позволяет вам получить доступ к и sale.Item.Department после него. Это преобразование, а не оператор, как в SQL.

+0

. Невозможно напрямую связать menuitemkey с таблицей отдела, по крайней мере, согласно Intellisense. Возможно ли, что эти ассоциации не были созданы? Я создал объекты на основе существующего db вместо использования конструктора при создании моих моделей данных. – Nate58

+1

Более чем вероятно, что мы не создали ассоциацию. Обычно ассоциации автоматически генерируются мастером DbFirst edmx на основе внешних ключей. Если они отсутствуют, потому что ваша БД не использует внешние ключи, что, как правило, очень плохо. – Aron

+0

У меня нет контроля над тем, как создается база данных, которую она смоделировала из хранилища данных, который передает кубик olap. Могут ли ассоциации создаваться вручную? У меня есть только некоторые из них, которые имеют большое значение, иначе я их не очень сильно – Nate58