繁体   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