2013-06-04 50 views
1

我希望有人能幫助我下面。linq的多個查詢

我的表像,

(Job) 
JobID 
CustomerID 
JobPartID 

Job -> JobPart (One to Many) 
(JobPart) 
JobPartID 
JobID [Foreign Key – ref JobID(JobID)] 
Pickup-AddressID [Foreign Key – ref Address(AddressID)] 
Destination-AddressID [Foreign Key – ref Address(AddressID)] 

Address is a separate table 
(Address) 
AddressID 
HouseNo 
Street 
City 
Etc.. 

我要的是,針對特定客戶的所有JobPart與詳細地址。

回答

0

嗯,這甚至​​不會編譯C#是有效的,但我認爲你要尋找的是這樣的:

var results = 
    from j in job 
    from jp in j.JobParts 
    where j.CustomerID == 1 
    select new { jp.PickupAddress, jp.DestinationAddress }; 

這將工作假設你有正確的導航屬性設置之間JobPartsAddresses

你可以使用這個很容易地爲:

foreach(var record in results) 
{ 
    var pickupHouseNo = record.PickupAddress.HouseNo; 
    var pickupStreet = record.PickupAddress.Street; 
    // ... 
    var destinationHouseNo = record.DestinationAddress.HouseNo; 
    var destinationStreet = record.DestinationAddress.Street; 
    // do stuff 
} 

如果你真的希望他們爲扁平的查詢結果,只是用這個:

var results = 
    from j in job 
    from jp in j.JobParts 
    where j.CustomerID == 1 
    select new 
    { 
     PickupHouseNo = jp.PickupAddress.HouseNo, 
     PickupStreet = jp.PickupAddress.Street, 
     // ... 
     DestinationHouseNo = jp.DestinationAddress.HouseNo , 
     DestinationStreet = jp.DestinationAddress.Street, 
    }; 
+0

感謝。我編輯了我的問題。我認爲這並不明確。我有導航屬性設置。但我只想從地址表中說出街道和城市。我如何做到這一點。如果我提出的問題太簡單或幾乎不困難,我很抱歉。 – Anup

+0

@Anup我的原始代碼可以讓你得到你想要的任何地址屬性,但是如果你想要一個平坦的查詢結果,你也可以這樣做。看到我更新的答案。 –

+0

我也試過這個。這裏的問題是jp.Address.Street,如果(JobPart-> Address)是(一對多)。但是這裏的外鍵在JobPart中。這意味着另一種方式是可查詢的(地址 - > JobPart)。 – Anup