が、私は単純なテーブルを持っている '車':選択中の条件を選択し()()
IdCar | Name | Id_Base
1 Toyota null
2 Honda 5
3 Ford 4
4 Buick null
5 Volvo 1
Id_Base
は、このテーブルCars
のIdCar
フィールドへの参照です。これは循環参考のようなものです。私はそれが変だと知っていますが、私は何もできません。
私はCarDTO
を持っている:
public class CarDTO
{
public int IdCar { get; set; }
public int? Id_Base { get; set; }
public string Name { get; set; }
public CarDto InnerCar {get; set; }
}
私の目標は、Id_Base
がNOT NULL
ある場合CarDTO
にテーブルCars
の各要素を投影することです。つまり、私はをIdCar
とし、InnerCar
のプロパティをCarDTO
と書きます。
だから、希望的観測の結果は次のようになります。私が試した
new Car(){ IdCar = 1, Name = "Toyota", Id_Base = null},
new Car(){ IdCar = 2, Name = "Honda", Id_Base = 5,
InnerCar = new Car(){ IdCar = 5, Name="Volvo" }},
new Car(){ IdCar = 3, Name = "Ford", Id_Base = 4,
InnerCar = new Car(){ IdCar = 4, Name="Buick" }},
new Car(){ IdCar = 4, Name = "Buick", Id_Base = null },
new Car(){ IdCar = 5, Name = "Volvo", Id_Base = 1,
InnerCar = new Car(){ IdCar = 5, Name="Toyota" }}
何:
var cars = from car in db.Cars
let innerCar =
(from inCar in db.Cars
where inCar.id_Base != null && inCar.IdCar == car.IdCar
select new CarDTO
{
Name = inCar.Name,
IdCar = inCar.IdCar,
IdBase = inCar.id_Base,
InnerCar = null
}
).FirstOrDefault(x => x.IdBase == car.id_Base)
select new CarDTO
{
Name = car.Name,
IdCar = car.IdCar,
IdBase = car.id_Base,
InnerCar = innerCar
};
しかしInnerCar
は常にnullです。私は何が間違っているのか理解できません。誰も各要素を投影してInnerCar
を作成する方法を知っていますか?
プラスである単純なコードであり、これまでにnullではない 'innerCar'(小文字の 'L')ですか? '.FirstOrDefault(x => x.IdBase == car.id_Base)'はこれまでにnull以外を返しますか?サブクエリが常にnullを返す場合は、その理由を把握します。 –
どのエンティティフレームワークのバージョンを使用していますか? – jag
ホンダはボルボのブランドですか? –