C# LINQ中的多对多查询

C# LINQ中的多对多查询,c#,linq,C#,Linq,我有4张桌子: 地址-地址ID、城市、地址、ZipCode OBAddress-OBID,AddressID OB-OBID 州-州ID,州缩写 如何连接处于多对多关系中的三个表?我试过: var recordsPhysicalAddress = ( from a in db.Addresses join oba in db.obAddresses on a.AddressID equals oba.AddressID join ob in db.obAddresses on o

我有4张桌子:

地址-地址ID、城市、地址、ZipCode

OBAddress-OBID,AddressID

OB-OBID

州-州ID,州缩写

如何连接处于多对多关系中的三个表?我试过:

var recordsPhysicalAddress = ( from a in db.Addresses
    join oba in db.obAddresses on a.AddressID equals oba.AddressID
    join ob in db.obAddresses on oba.obID equals passedinID
    join s in db.States on a.StateID equals s.StateID
    where oba.obID == ob.obID
    && a.AddressTypeID == '5' //5 is records physical address
    select new
    {
        a.Address1, 
        a.City, 
        a.StateID,
        s.StateAbbreviation,
        a.ZipCode
    }).FirstOrDefault();

我在评论中提出了一些问题。但仍然想知道为什么您提到了有问题的第四个表?

我认为您不需要“where oba.obID==ob.obID”,因为您已经在对其进行连接。而且,仔细想想,为什么您要进行连接,而根本不使用连接中的任何内容?为什么还要加入他们?我已经编辑了你的标题。请参见“”,其中共识是“不,他们不应该”。@user1220099您确定有一些数据与您的查询条件匹配吗?顺便说一句,addresstypeID的类型是char?该死的,一直都是这样,addresTypeID不是char,它的类型是int。愚蠢的错误,谢谢你抓住了。。。。。
var query = (from a in db.Addresses
             join oba in db.obAddresses on a.AddressID equals oba.AddressID
             // do not join with db.obAddresses again
             join s in db.States on a.StateID equals s.StateID
             where oba.obID == passedinID // filter here
                   && a.AddressTypeID == '5'
             select new {
                   a.Address,
                   a.City,
                   a.StateID,
                   s.StateAbbreviation,
                   a.ZipCode
             }).FirstOrDefault();