【问题标题】:multiple query with linq使用 linq 进行多重查询
【发布时间】:2013-06-04 00:36:48
【问题描述】:

我希望有人可以帮助我解决以下问题。

我的桌子是这样的,

(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 以及地址详细信息。

【问题讨论】:

    标签: c# linq multiple-tables


    【解决方案1】:

    嗯,它甚至不会编译为有效的 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, 
        };
    

    【讨论】:

    • 谢谢。我已经编辑了我的问题。我认为还不清楚。我设置了导航属性。但我只想从地址表中说街道和城市。我如何做到这一点。如果我问的问题太简单或几乎不难,我很抱歉。
    • @Anup 我的原始代码允许您获取任何您想要的地址属性,但是如果您想要一个平面查询结果,您也可以这样做。请参阅我的更新答案。
    • 我也试过这个。如果(JobPart->Address)是(一对多),这里的问题是 jp.Address.Street 有效。但是这里的外键在 JobPart 中。这意味着另一种方式是可查询的,即 (Address -> JobPart)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多