【问题标题】:Query- LINQ, 2 tables, Union查询 - LINQ,2 个表,联合
【发布时间】:2017-12-20 16:00:02
【问题描述】:

这是我的两张桌子:

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? (而不是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 和教程老师的代码编辑器。还有其他选择吗?

【问题讨论】:

    标签: c# sql asp.net linq


    【解决方案1】:

    要使用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});
    

    【讨论】:

    • 谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多