Linq to Sql Inner Join
我正在使用join编写linq to sql语句。通过搜索,我找到了下面的链接:linq to sql中的内部联接的语法是什么?在这个问题中,答案是:
1 2 3
| var dealercontacts = from contact in DealerContact
join dealer in Dealer on contact.DealerId equals dealer.ID
select contact; |
在该语句中,内部联接用于单个比较语句,即on contact.DealerId equals dealer.ID,但当我尝试执行on contact.DealerId equals dealer.ID && contact.Branch equals dealer.Branch时,它不接受第二个比较语句。请给我指路,我怎么能拿到这个?
- 请参阅我的问题:stackoverflow.com/question s/7229569/…-不需要这样做。
您的模型在实体级别上没有真正的关联吗?
也就是说,DealerContact拥有一个属性来代表相关的Dealer,而不仅仅是处理ID。
您可能甚至不需要手动指定该联接。怎么样:
1 2 3
| var dealercontacts = from contact in DealerContact
where contact.Branch equals contact.Dealer.Branch
select contact; |
- Linq to SQL对我来说是新的。我只是个初学者。我想可能就是这样。告诉我哪条路最好?
- 哦,我明白了。好吧,如果可以通过关联来解决的话,您应该让L2S(或者任何其他的ORM)为您进行连接。它最终成为更干净的代码,并且不容易出错;)尝试对导航属性和关联进行一些研究,以习惯于将查询更多地视为与其他对象关联和包含在其他对象中的对象,而不是关系外键和联接。并且始终尝试让一个SQL事件探查器在手边,检查ORM为您做了什么,并确保查询仍然是最佳的。stackoverflow.com/a/7231211/1373170
LINQ到SQL连接可以通过BELO代码在多个条件下实现:
1 2 3 4
| var q = (from l1 in lst
join l2 in lst1 on new { prop1 = l1 .Property1, prop2 = l1 .Property2 }
equals new { prop1 = l2 .Property1, prop2 = l2 .Property2 }
select l1 ); |
给属性赋予别名(如prop1=l1.property1,"prop1"是property1的别名)是一种很好的做法,因为有时我们正在连接具有不同属性名的属性,因此它会给出编译时间错误。
另外,请确保属性上的联接类型应与int和int相同?是不一样的。
在linq to sql中连接多个列有点不同。
1 2 3 4
| var query =
from t1 in myTABLE1List // List<TABLE_1>
join t2 in myTABLE1List
on new { t1 .ColumnA, t1 .ColumnB } equals new { t2 .ColumnA, t2 .ColumnB } |
您需要在两个键之间为Id和Branch为EqualityComparer创建匿名对象:
LINQ语法方法:
1 2 3 4 5
| var dealercontacts = from contact in contacts
join dealer in dealers
on new { Id = contact .DealerId, contact .Branch }
equals new { Id = dealer .ID, dealer .Branch }
select contact ; |
lambda方法:
1 2 3 4
| var dealercontacts = contacts .Join(dealers,
contact => new { Id = contact .DealerId, contact .Branch },
dealer => new { Id = dealer .ID, dealer .Branch },
(contact, dealer ) => contact ); |
我想你可以从这里得到答案
从链接复制并粘贴
1 2 3 4 5 6 7
| var query = from s in context .ShoppingMalls
join h in context .Houses
on
new { s .CouncilCode, s .PostCode }
equals
new { h .CouncilCode, h .PostCode }
select s ; |