2014-12-17 2 views
4

У меня есть таблица с составным ключом, например:Запрос списка лиц с составными ключами в EF

modelBuilder.Entity<MyEntity>().HasKey(e=> new { e.Part1, e.Part2 }); 

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

var keys = new [] { new { Part1= 1, Part2 = 2}, new { Part1= 3, Part2 = 4} } 

Как я могу выполнить один запрос для загрузки объектов в массиве ключей?

Я пробовал очевидные вещи, как ctx.MyEntities.Where(e => keys.Any(k => k.Part1 == e.Part1 && k.Part2 == e.Part2))

This answer наводит на мысль, что это не возможно, но, конечно, это не может быть.

+1

Можете ли вы рассказать больше о вашей информации схемы? Я думаю, что это возможно, но я был бы признателен за некоторые примеры таблиц и ключей для начала. У вас есть первичный ключ в одной таблице, который объединяется из n столбцов в этой таблице, верно? И: Какую версию фреймворка сущности вы используете? Есть много изменений между версиями, возможно, одно относится к вашему делу. –

+0

@gertarnold спасибо, ваш ответ в связанном вопросе блестящий. Знаете ли вы, есть ли в накопителе EF билет, чтобы решить эту проблему более надежным способом? если не ima добавить один. –

+0

Не то, чтобы я знал. Но я сомневаюсь, потому что основной язык (40-летний SQL fcol) не поддерживает его. –

ответ

-1

Я рекомендовал бы делать что-то вроде следующего:

var part1Keys = keys.Select(k => k.Part1); 
var part2Keys = keys.Select(k => k.Part2); 

var entities = ctx.MyEntities.Where(e => part1Keys.Contains(e.Part1) && part2Keys.Contains(e.Part2)); 
+0

Вы также можете пересечь наборы. Но я бы пошел на решение рамки сущности. Учитывая более конкретный пример из ОП. –

+1

Это * - решение для платформы Entity Framework. Вы можете использовать 'Enumerable.Contains' в EF. – IronMan84

+0

Конечно, это EF и linq для сущностей. Просто подумал, что должен быть более «прямой» способ записать это. Можете ли вы рассказать о запросе, который получен из этого? (Думайте, что это должен быть единственный запрос, как запрошенный OP, но его поздно здесь, и я довольно устал) –

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