1

之間我有2代表具有以下結構:與條件EF核心查詢多個表

用戶

UserId | Age 
---------------- 
    1  15 
    2  36 
    3  25 

DictAges

Title | FromAge | ToAge 
------------------------------- 
    1  0    20 
    2  20   35 
    3  35   100 

我創建neccessary模型DbContext,名爲UserModelDictAgesModel,具有完全相同的屬性在桌子結構處顯示。我想用id來查詢用戶,並根據用戶的年齡加入標題。這是我以前使用的MySQL代碼:

SELECT User.UserId, DictAges.Title 
FROM User, DictAges 
WHERE User.UserId = :id 
    AND User.Age BETWEEN DictAges.FromAge AND DictAges.ToAge 

請注意,我沒有任何導航屬性添加到任何這些模型的(我應該加什麼?)

我怎麼能翻譯查詢像這樣去實體框架核心查詢?

回答

1

因此,您沒有導航屬性,您可以按如下所示進行操作。

基於查詢的:

from p in ctx.User 
join q in ctx.DictAges on p.UserId equals q.Title 
where p.UserId == :id AND p.Age BETWEEN q.FromAge AND q.ToAge 
select new {UserId = p.UserId, Title = q.Title }; 

方法基於:

ctx.User.Join(ctx.DictAges, 
    p => p.UserId, 
    q => q.Title, 
    (p, q) => new { User = p, DictAges = q }) 
.Where(s => s.User.UserId == :id && (s.DictAges.FromAge <= s.User.Age && s.User.Age <= s.DictAges.ToAge)) 
.Select(ss => new { UserId = ss.User.UserId, Title = ss.DictAges.Title}); 

注:因此您不必導航性能,基於方法的語法很complex.In其他字有一個可讀性問題。 B'cos我想在這些情況下基於查詢的語法。

更新:

您可以瞭解使用此文章導航性能:Relationships

+0

你可以寫它的lamdba版本,如果我不要求太多? –

+0

updated.please看到的。 – Sampath

+0

看起來不錯,我會盡快嘗試。在此之前,你能否請添加一些關於導航屬性的更多信息,我的意思是哪個類應該有它,以及這將如何影響查詢本身?無論如何,謝謝你,如果給定的代碼適用於我的解決方案,我會接受你的答案。 –