0

データベースに 2 つの非常によく似たテーブルがあります (tblCar と tblPlane)。それらは同じ列を持ち、tblCar は car_ で始まり、tblPlane は pl_ で始まります。つまり、car_id、pl_id などです。

テーブルから行を取得して連結します。

var cars = (from x in db.tblCar select x).ToList();
var planes = (from x in db.tblPlane select x).ToList();
var result = cars.Cast<object>().Concat(planes.Cast<object>());

そして、それはうまくいきます。

ただし、どちらのテーブルにも、更新日の列があります: cat_update と pl_update です。その型は DateTime であり、この列で結果リストを最新のものから順に並べる必要があります。

プロパティの名前が異なる場合の順序付け方法は?

4

3 に答える 3

1
var orderedResult = cars.Cast<object>().Concat(planes.Cast<object>())
    .OrderBy(o => o is Car? ((Car)o).car_date : ((Plane)o).pl_date);

しかし、これはあまり安全ではありません。テーブルに同じ列がある場合、すべての値を同じ列に配置して、車か飛行機かを示すビット フィールドを使用できないのはなぜでしょうか?

于 2012-10-18T14:07:05.170 に答える
1

Car と Plane の親タイプを作成することを検討しましたか? どちらもキャストできる Vehicle クラスのようなものですか? 車両クラスのフィールドの 1 つが _date になります。したがって、コードは次のようになります。

var orderedResults = cars.Cast<Vehicle>().Concat(planes.Cast<Vehicle>())
       .OrderBy(v => v._date);

このようにして、コンパイル時の型の安全性を保持し、より論理的な型階層を持ちます。これは、両方のテーブルですべての列が同じであるため、それらを車両として表現するのに何の問題もないはずです。

于 2012-10-18T14:19:04.153 に答える
0

次のようにできます。

private class VehicleHolder
{
    public DateTime Date { get; set;}
    public object Vehicle { get;set; }
}

//...

var cars = (from x in db.tblCar 
            select new VehicleHolder() { Date = x.car_date, Vehicle = x }).ToList();
var planes = (from x in db.tblPlane 
              select new VehicleHolder() { Date = x.pl_date, Vehicle = x }).ToList();

var result = cars.Concat(planes).OrderBy(v => v.Date).Select(v => v.Vehicle);

しかし、私は Chris に同意します。共通の親タイプの方がはるかにクリーンです。

于 2012-10-18T14:24:47.023 に答える