2016-02-17 5 views
0

Может кто-нибудь помочь мне сформировать ниже SQL-запрос в Entity framework linq?SQL to LINQ inner JOIN

AccountApplication стол имеет два FK-х:

AccountApplication [AccountId] -> Счет [AccountId]

и

AccountApplication [ApplicationID] -> Application [ ApplicationId]

select * from Invoice a inner join AccountApplication b on b.AccountId = 3 and b.ApplicationId = a.ApplicationId

У меня нет таблицы данных AccountApplication, доступной в EF.

Что мне нужно - это список фактур, принадлежащих к приложению (-ам), к которому принадлежит данный идентификатор учетной записи. И связь между applicationid's accountid's находится в таблице AccountApplication.

Screenshot of EF classes with navigation properties

+1

* У меня нет таблицы данных AccountApplication, доступной в EF. * Почему? –

+0

Почему «у меня нет таблицы сущностей AccountApplication, доступной в EF». ? Для этого вы можете использовать Joins в LINQ. – Rigin

+0

EntityFramework автоматически создает объект ссылок, когда вы используете FK между таблицами. Поэтому в счет-фактуре у меня есть прямая ссылка на Application-объект из таблицы приложений. Это создается автоматически, и фактическая таблица ссылок пропускается. uhm – demax

ответ

0

С навигационными свойствами он довольно просто

var query = db.Invoices.Where(invoice => invoice.Application.Account 
    .Any(account => account.AccountId == 3)); 

Я надеюсь, что вы сейчас видите, почему они называются навигации свойства. Внутри запроса вы используете их для «навигации» (доступа) к необходимым данным, а EF использует их в качестве метаданных для генерации необходимых объединений.

+0

Спасибо! Это лидирует. В моем случае я должен был сделать что-то вроде этого. Db.Invoice.Where (x => x.Application.Account.FirstOrDefault(). AccountId == accountId) – demax

+0

Извините, я пропустил это. Таким образом, это отношения «многие-ко-многим», а «Application.Account» - это коллекция. В этом случае 'FirstOrDefault()' не является хорошим, потому что он будет выбирать случайную учетную запись, вам нужно использовать 'Any (..)' - я обновлю ответ. Просто дружеский совет - в следующий раз, когда у вас возникнет аналогичная проблема, опубликуйте классы сущностей вместо диаграммы. –

0
var records= (from a in context.Invoices join b in context.AccountApplication 
       on a.accountId equals b.accountId 
       where b.accountId==3 
       select new {a.Id,b.Id,....etc});