リンク;新しい {} が Iqueryable を返すように強制しますか?
-
11-09-2019 - |
質問
小さなクエリを作成しましたが、Linqpad ではうまく機能しましたが、(以下を参照) Tariffs が Iqueryable として返されません。これを修正する方法を知っている人はいますか?
基本的には「関税 = 新しい ....」を参照してください。
from v in House
join gvt in
(from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
Id = v.Id,
Tariffs = new
{
Deposit = gvt.CurrentDeposit
}
}
これを試しましたが、gvtがテーブルか何かではないため無効ですか?
from v in House
join gvt in
(from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
Id = v.Id,
Tariffs = from x in gvt // NOTICE i am doing from x in gvt... But it fails..
select new
{
Deposit = gvt.CurrentDeposit
}
}
もちろん、gvt には内部結合があるため、必要な値だけが含まれています...
MyTariffsから直接プルすることもできますが(これは機能し、Iqueryableを返します)、gvtで行った結合を考慮していないため、情報が多すぎますか?
from v in House
join gvt in
(from t in MyTariffs where t.Id == 3 select t)
on v.IdTariff equals gvt.Id
select new
{
Id = v.Id,
Tariffs = from x in MyTariffs // THIS has nothing to do with my join
select new
{
Deposit = gvt.CurrentDeposit
}
}
解決
サブクエリ内のデータを選択してください -- Id == 3 でよろしいですか? そして Id == v.IdTariff?本当にそうである場合は、外側のクエリに where 句を追加して、v.IdTariff == 3 の場合に v のみを選択することができます。ただし、あなたはそれらすべてを望んでいると思います。
var q = from v in House
select new {
Id = v.Id,
Tariffs = (from g in MyTariffs
where g.Id == v.IdTariff
select g.CurrentDeposit)
};
コメントに応えて、グループ化されたサンプル (未コンパイル/未テスト)。
var q = from v in House
join g in (from t in MyTariffs where t.Id == 3 select t)
group by v.Id into gvt
select new {
Id = gvt.Key,
Tariffs = gvt.g
};
所属していません StackOverflow