我对我的项目模型进行了更改,并且有一个联接,我似乎无法弄清楚如何根据模型更改进行更改。这是原始模型设置和连接代码:
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)。尝试指定类型 明确的论点。
答案 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);