这是我的两个表:

publicParking(publicParkingID, address, latitude, longtitude, status,
              PricePerHour, maxSpaces, occupiedSpaces, freeSpaces, isOrdered)




parkingLot(parkingLotID, address, latitude, longtitude, status,
           PricePerHour, maxSpaces, occupiedSpaces, freeSpaces, isOrdered)


除ID外,所有列均相同。

我需要在LINQ中编写查询,该查询将返回一个按价格排序的表格,其中包含所有可用的停车位(publicParking / parkingLot)-带有status==true

该表应如下所示:


  ID地址经度状态


我应该做一个联合,还是应该更改表,以便第一列仅调用ID? (而不是publicParkingIDparkingLotID

我已经尝试过此代码,但是它不起作用

var union =
         (from lot in parkingLots
         where lot.status == true
         select lot).Union( from pub in publicParkings
         where pub.status==true
         select pub);


它给出了这个错误:



我正在使用LINQPad5和tutorialsteacher的代码编辑器。还有其他选择吗?

最佳答案

要使用Union,两个结果序列必须包含相同的类型。在您的示例中,外部查询包含parkingLot和内部publicParking

可以使用匿名类型解决:

var union =
     (from lot in parkingLots
     where lot.status == true
     orderby lot.PricePerHour // don't forget ordering
     select new {
           ID = lot.parkingLotID,
           lot.address, lot.latitude, lot.longitude, lot.status})
    .Union(from pub in publicParkings
     where pub.status==true
     orderby pub.PricePerHour // don't forget ordering
     select new {
           ID = pub.publicParkingID,
           pub.address, pub.latitude, pub.longitude, pub.status});


但是对于进一步的数据处理而言,最好是一个自定义类:

public class ParkingData
{
    public int ID {get; set;}
    public string Address {get; set;}
    public double Latitude {get; set;}
    public string Longitude {get; set;}
    public bool Status {get; set;}
}


并像这样查询:

var union =
     (from lot in parkingLots
     where lot.status == true
     orderby lot.PricePerHour // don't forget ordering
     select new ParkingData {
           ID = lot.parkingLotID,
           Address = lot.address,
           Latitude = lot.latitude,
           Longitude = lot.longitude,
           Status = lot.status})
    .Union(from pub in publicParkings
     where pub.status==true
     orderby pub.PricePerHour // don't forget ordering
     select new {
     select new ParkingData {
           ID = pub.publicParkingID,
           Address = pub.address,
           Latitude = pub.latitude,
           Longitude = pub.longitude,
           Status = pub.status});

10-01 23:21
查看更多