Je serais très enclin à réparer la base de données aussi. Vous ne dites pas dans votre question quel champ est la chaîne et quelle est la décimale, mais de toute façon, je ne pense pas que l'utilisation d'une décimale ait un sens en tant que clé. Ce serait mieux si elles étaient à la fois des chaînes, des entiers ou des GUID. Néanmoins, vous avez quelques autres options.
La première option est d'ajouter une vue ou un proc stocké qui convertit l'un des champs avant qu'il n'atteigne l'EF.
L'autre option consiste à mettre en mémoire le jeu de données le plus petit et à le diffuser via le code. Si je suppose que GiftCards
est le plus petit ensemble et que OwnerId
est la décimale, vous pourriez essayer ceci:
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(),
});
Faire ces requêtes provoquera des requêtes telles que les suivantes à exécuter:
SELECT ...
FROM [GiftCards] AS t0
SELECT ...
FROM [Customers] AS t0
WHERE t0.[customer_Key] IN ("1", "2", "3", ..., "1442")
Let Je sais si cela fonctionne pour vous. À votre santé.
Peut-être possible dans ESQL, mais ... Je réparerais la base de données à la place. –
hahaha, merci :) c'est un peu bizarre parce que le champ de chaîne peut pointer vers un certain nombre d'autres champs, dans ce cas c'est un champ décimal. – Michel