2016-11-29 37 views
0

我有一个方法与如下:EF - 匿名类型不能有倍数...

using (ubmmsEntities db = new ubmmsEntities()) 
     { 
      var result = (from l in db.log_documents 
          join t in db.teams on l.op_user_team equals t.id 
          where l.tracking_id == trackingID 
          select new { l.op_code, l.op_date, l.op_description, l.op_refer_code, l.op_refer_comments, t.team_name, l.id }); 
      return result. 

现在我要补充另一列它,并在简单的SQL所有我需要是增加两个更多的内部连接,但我很失去如何在EF中做到这一点下面的结果在t2.team_name下的错误“一个匿名类型不能有多个同名的属性”。

using (ubmmsEntities db = new ubmmsEntities()) 
     { 
      var result = (from l in db.log_documents 
          join t in db.teams on l.op_user_team equals t.id 
          join r in db.refers_codes on l.op_refer_code equals r.code 
          join t2 in db.teams on r.id equals t2.id 
          where l.tracking_id == trackingID 
          select new { l.op_code, l.op_date, l.op_description, l.op_refer_code, l.op_refer_comments, t.team_name, l.id, t2.team_name }); 
      return result.ToList(); 
     } 

所以,我看了看这里和那里,发现this thread,但我无法弄清楚如何应用解决方案,我的方法。我搜索了“EF命名类型”,类似于试图了解从我这里要求什么,但老实说,我无法自己弄清楚。

因此,我相信问题是因为EF要我给我的db.team设置一个唯一的名称......我认为我通过调用它来给它t2。这种方法对SQL有效,但我不明白如何将这些应用于我的方法。我确实发现了一些线索,例如new{t2=t.id},但是不同的错误开始在不同的地方弹出。

请帮助/指示?

+0

从回答第二个句子:_“可以解决这个问题给予明确的属性名称,例如:'新的{U1 = m.UserId ,u2 = u.UserId}'“_...这就是解决方案。如果这导致新的错误,请给他们看。 – CodeCaster

+0

使用'在r.id中的db.teams中加入t2等于new {t2 = t2.id}'将错误更改为'join'“join子句中的一个表达式的类型不正确”。我确实认为链接问题可能是我需要的,问题是我无法弄清楚正在做什么并应用它 –

+0

这不是您需要更改的连接部分,而是'select new {。 ..}部分。 – CodeCaster

回答

1

您可以在projectction给名字的属性,即

.Select(x => new { firstItem = x.y, secondItem = x.x });

你可以用这个来解决你的问题。

或者,因为你正在做它:

select new { firstItem = x.y, secondItem = x.x } .....