如何根据涉及继承的模型更改来修改此连接?

时间:2013-08-06 22:20:12

标签: c# asp.net entity-framework

我对我的项目模型进行了更改,并且有一个联接,我似乎无法弄清楚如何根据模型更改进行更改。这是原始模型设置和连接代码:

Old Relationship

           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);

此连接的结果是生成的查询仅提供相互关联的报告关系(如双方已相互报告)。这个连接完全正常,直到我改变模型。

这是新的模型设置

New Relationshi[

这是我尝试修改连接代码

              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)。尝试指定类型   明确的论点。

1 个答案:

答案 0 :(得分:1)

我假设SourceUser的类型为UserAccount,而TargetReportable的类型为Reportable。 lambda将苹果与橙子进行比较。您需要将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);