0

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

旧关系

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

4

1 回答 1

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);
于 2013-08-06T23:08:06.290 回答