关于c#:Linq to Sql Inner Join

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时,它不接受第二个比较语句。请给我指路,我怎么能拿到这个?


您的模型在实体级别上没有真正的关联吗?

也就是说,DealerContact拥有一个属性来代表相关的Dealer,而不仅仅是处理ID。

您可能甚至不需要手动指定该联接。怎么样:

1
2
3
var dealercontacts = from contact in DealerContact
                     where contact.Branch equals contact.Dealer.Branch
                     select contact;


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 }

您需要在两个键之间为IdBranchEqualityComparer创建匿名对象:

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;