[英]Linq to entities / EF : join to tables on a decimal and a string field
我想聯接兩個表,但是兩個聯接字段的格式不同:一個是小數,一個是字符串。
Linq不允許我使用ToString()
將十進制字段轉換為字符串,或者使用Convert.ToDecimal()
comand將字符串字段轉換為十進制。
var tmp = from c in gge.GiftCards
join p in gge.Customers
on c.OwnerId equals p.customer_Key
into g
from o in g.DefaultIfEmpty()
select new MyCardViewModel {GiftCard = c, Customers= g};
有沒有辦法做到這一點?
我也非常傾向於修復數據庫。 您沒有在問題中說哪個字段是字符串,哪個字段是小數,但是無論哪種方式,我都不認為使用小數作為鍵是有意義的。 如果它們都是字符串,整數或GUID,那會更好。 不過,您還有其他一些選擇。
第一個選項是添加一個視圖或存儲的proc,該視圖或存儲的proc在轉換到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")
讓我知道這是否適合您。 干杯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.