2012-11-16 147 views
0

我知道我们通过使用匿名类实现连接中的多个条件,但任何人都可以确认下面的方法不起作用吗?似乎没有,我有困难的时间验证。LINQ到SQL加入多个条件

... 
join up in db.UserProfiles on 
new { UserId = uf.UserId, IsDeleted = false, IsApproved = true } equals 
new { UserId = up.UserId, IsDeleted = up.IsDeleted ?? false, IsApproved = up.aspnet_User.aspnet_Membership.IsApproved } 
+0

我知道我们通过使用匿名类实现连接中的多个条件=>对我来说似乎是一个复杂的方法。你为什么使用||并在条件? – Pleun

+0

@Pleun ???我错过了什么吗?我没有使用||和&&有没有权利?那?是实现一个coalesce()。并通过使用匿名类加入是因为我是一个SQL人,并试图潜意识地模仿它在我的LINQ?我只是觉得加入越来越多的主要连接感觉不舒服,上面的想法虽然我不知道,但更多的是“高效”的。这是Linq的一个牛肉。检查它为每个生成的sql qry生成的sql产生并尝试优化它是一件麻烦的事情。 – Brian

+0

你想用纯英语达到什么样的结果?所有用户配置文件被批准并且不被删除或者... – Pleun

回答

0

要回答我自己的问题,'常量'在LINQ to SQL连接匿名类中的属性是有效的,并且确实带来了预期的结果。我注意到意外行为的根源是一个完全不同的问题 - Described Here

0

“我想被批准,而不是所有的用户配置文件删除”

只需使用LINQ,尽量不要重新创建SQL ...不得不猜测有点关系,但你会得到的图片

Var x= From up in db.UserProfiles 
     where up.aspnet_User.aspnet_Membership.IsApproved == true && 
      (! up.Isdeleted == true) 
     select up; 

或模仿凝聚

Var x = From up in db.UserProfiles 
      where up.aspnet_User.aspnet_Membership.IsApproved == true && 
      (up.Isdeleted == false || up.Isdelete == null) 
      select up; 

(我会做的!假在这种情况下,由于空有一些问题显然 - 但我从来没有经历过他们,你可以看看LINQ query - null date

+0

哼。我很感激你的时间,我明白你的意思,谢谢。但是,我没有向你传达我的大局,我的上面的块只是一个更大的查询中的块,有很多其他联接。我的主要问题是,我们是否可以依靠linq在加入时在匿名类中使用“常量”属性。我的错,为了不画整个画面,但我想我知道发生了什么,明天我会回来的时候会公布这个问题的原因。 – Brian

+0

另外,我知道我错误地键入了'不是'两次。所以 !在你的查询不应该在那里。 – Brian

+0

- 你的第一个选项是不正确的(你删除的编辑!现在导致完全相反的意思)。结果应包括所有未被删除的内容;不是所有被删除的东西。 – Brian