Я бы тоже очень хотел исправить базу данных.Вы не говорите в своем вопросе, какое поле является строкой, а какое десятичным, но в любом случае я не думаю, что использование десятичного знака имеет смысл в качестве ключа.Было бы лучше, если бы они были строками, целыми числами или идентификаторами GUID.Тем не менее, у вас есть пара других опций.
Первый вариант - вы добавляете представление или сохраненный процесс, который преобразует одно из полей, прежде чем оно попадет в EF.перенести меньший набор данных в память и привести через код.Если я предполагаю, что GiftCards
- это меньшее множество, а OwnerId
- десятичное число, вы можете попробовать это:
var gcs = gge.GiftCards
.Select(gc => gc.OwnerId)
.ToDictionary(x => x.OwnerId.ToString(), x => x);
var gcIds = gcs.Keys.ToArray();
var results = (
from p in gge.Customers
where gcIds.Contains(p.customer_Key)
select p)
.ToArray()
.GroupBy(p => p.customer_Key)
.Select(p => new MyCardViewModel
{
GiftCard = gcs[p.Key],
Customers = p.ToArray(),
});
Выполнение этих запросов приведет к выполнению запросов, подобных следующим:*
SELECT ...
FROM [GiftCards] AS t0
SELECT ...
FROM [Customers] AS t0
WHERE t0.[customer_Key] IN ("1", "2", "3", ..., "1442")
Дайте мне знать, если это работает для вас.Приветствия.