簡體   English   中英

如何根據涉及繼承的模型更改來修改此聯接?

[英]How do I modify this join in accordance with a model change involving inheritance?

我對項目的模型進行了更改,但有一個聯接似乎無法弄清如何響應模型更改而進行更改。 這是原始的模型設置以及連接代碼:

舊關系

           query = query.Join(db.Reports,
                x => new
                {
                    x.SourceUser,
                    x.TargetUser
                },
                x2 => new
                {
                    SourceUser = x2.TargetUser,
                    TargetUser = x2.SourceUser
                },
                (x, x2) => new { x, x2 }).Where(f => (f.x.SourceUser == user)).Select(p => p.x);

這種聯接的結果是,結果查詢僅提供相互之間的報告關系(例如,雙方都相互報告了)。 直到我進行模型更改之前,此連接都可以正常工作。

這是新的模型設置

新關系[

這是我嘗試修改聯接代碼的嘗試

              query = query.Join(db.Reports,
                x => new
                {
                    x.SourceUser,
                    x.TargetReportable
                },
                x2 => new
                {
                    SourceUser = x2.TargetReportable,
                    TargetReportable = x2.SourceUser
                },
                (x, x2) => new { x, x2 }).Where(f => (f.x.SourceUser == user)).Select(p => p.x);

這將導致以下錯誤:

無法從用法中推斷方法'System.Linq.Enumerable.Join(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.Func,System.Func,System.Func)的類型參數。 嘗試顯式指定類型參數。

我假設SourceUser的類型為UserAccount,TargetReportable的類型為Reportable。 λ比較蘋果和桔子。 您需要強制sourceuser鍵入Reportable,因為它繼承了Reportable。

 query = query.Join(db.Reports,
                x => new
                {
                    T = (Reportable)x.SourceUser,
                    x.TargetReportable
                },
                x2 => new
                {
                    SourceUser = x2.TargetReportable,
                    TargetReportable = (Reportable)x2.SourceUser
                },
                (x, x2) => new { x, x2 }).Where(f => (f.x.SourceUser == user)).Select(p => p.x);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM