2015-11-02 4 views
0

У меня есть две таблицы. Таблица контактов и таблица клиентов. ContactID - это внешний ключ в таблице клиентов. У меня есть запрос, который возвращает список контактов. Я хочу отдельный список всех клиентов, где client.contactid в первом списке контактов. Я думаю, что могу использовать любой метод только сейчас, как это сделать. Благодарю. Использование LINQ для EFЗапросы LINQ: Получить список, используя любой

List<Contact> contacts = GetContactByCompany().ToList(); 

Есть что-то вдоль линий

List<Client> = from client in Client.Any(client => contacts.ID.Contains(client.ContactID)) 
+1

С данной информацией: Да, вполне возможно, что вы могли. – SBI

+3

Непонятно, что вы просите +, мы не пишем для вас код, если вы не попробовали немного –

+1

Опубликовать код. –

ответ

2

Похоже, вы ищете что-то вроде этого

var clients = Client.Where(client => contacts.Any(contact => contact.ID == client.ContactID)).ToList(); 

или

var contactIds = contacts.Select(contact => contact.ID).ToList(); 
var clients = Client.Where(client => contactIds.Contains(client.ContactID)).ToList(); 
1

Возможное решение

Fetch список контактных идентификаторов из списка первых контактов получения файла

List<int> ContactIdList = ContactList.Where(x=>x.Id).ToList() 

Fetch Все Клиенты и фильтр для ContactId, являющиеся частью ContactIds список принес выше

List<Client> FilteredClientList = ClientList.Where(x=>ContactIdList.Contains(x.ContactId)).ToList() 
0
var clients = contacts.Select(c => c.Client); // Distinct() may be needed 

Sampling с MS SQL базы данных пример сервера Борей:

var orders = Orders.Where (o => o.ShipCountry == "USA"); 
var customers = orders.Select (o => o.Customer).Distinct(); 

Когда клиенты материализуется (Еогеасп, ToList() ...) это SQL отправлено к серверу:

-- Region Parameters 
DECLARE @p0 NVarChar(1000) SET @p0 = 'USA' 
-- EndRegion 
SELECT DISTINCT [t1].[CustomerID], [t1].[CompanyName], [t1].[ContactName], [t1].[ContactTitle], [t1].[Address], [t1].[City], [t1].[Region], [t1].[PostalCode], [t1].[Country], [t1].[Phone], [t1].[Fax] 
FROM [Orders] AS [t0] 
INNER JOIN [Customers] AS [t1] ON [t1].[CustomerID] = [t0].[CustomerID] 
WHERE [t0].[ShipCountry] = @p0 
+0

Клиент имел бы объект Contact, а не наоборот – luckyluke

+0

Это всегда два пути , Раньше я не видел вашего редактирования. Удалите «ToList()» там, иначе это будет несколько SQL-запросов, отправленных на сервер вместо одного. –

1

Теперь, когда вы говорите, что EF :(

List<Contact> contacts = GetContactByCompany().ToList(); 
var contactIds = contacts.Select(c => c.ContactID).Distinct(); 
var clients = ctx.Clients.Where(c => contactIds.Contains(c.ContactID)); 

PS: Это не будет работать за границу счета параметров для назначенного бэкэндом (т.е. в MS SQL, он будет работать до 2100 идентификаторов).