Pemetaan Jenis Array Entity Framework Core postgresql tidak berfungsi
Sep 24 2020
Saya memiliki masalah yang aneh, mungkin itu adalah sesuatu yang saya lewatkan, tetapi saya memiliki pertanyaan LINQ Lambda berikut:
var ss = ctx.ShipZones.SelectMany(
z => ctx.ShipDecks,
(z, d) =>
new
{
Zone = z.ZIndex,
Deck = d.DIndex,
Value = ctx.Tags
.AsExpandable()
.Include(s => s.TagSettings.Device.System)
.Where(s =>
s.TagSettings.TagTypeId == 171
&& s.TagSettings.Device.System.Id == z.Id
&& s.TagSettings.Device.ControlArea.Contains(d.Id)
)
.Average(s => s.Value)
}
).ToList();
Menurut artikel ini , ini harus diterjemahkan menjadi ini:
SELECT z.z_index AS "Zone", d.d_index AS "Deck", (
SELECT AVG(t.value)
FROM tags_current_data AS t
INNER JOIN tags_settings AS t0 ON t.tag_id = t0.id
INNER JOIN systems_devices AS s ON t0.device_id = s.id
INNER JOIN systems AS s0 ON s.system_id = s0.id
WHERE ((t0.tag_type_id = 171) AND (s0.id = z.id)) AND (d.id = ANY(s.control_area))) AS "Value"
FROM zones AS z
CROSS JOIN decks AS d
Tapi entah bagaimana, kueri yang diterjemahkan seperti ini:
SELECT z.z_index AS "Zone", d.d_index AS "Deck", (
SELECT AVG(t.value)
FROM tags_current_data AS t
INNER JOIN tags_settings AS t0 ON t.tag_id = t0.id
INNER JOIN systems_devices AS s ON t0.device_id = s.id
INNER JOIN systems AS s0 ON s.system_id = s0.id
WHERE ((t0.tag_type_id = 171) AND (s0.id = z.id)) AND (TRUE = FALSE)) AS "Value"
FROM zones AS z
CROSS JOIN decks AS d
Perbedaannya adalah di mana seharusnya d.id = ANY(s.control_area)ituTRUE = FALSE
Adakah yang bisa memberi tahu saya apa yang saya lakukan salah?
Terima kasih sebelumnya,
Julian Dimitrov
Jawaban
Julian Sep 25 2020 at 08:36
Saya bisa menyelesaikan masalah saya. Ada dalam masalah ini .
Pada dasarnya:
Itu ada di konfigurasi entitas. The
ControlAreaproperti diDevicebadan adalah dari jenisList<long>. Ketika saya mengubahnya menjadilong[](array panjang) itu berhasil!
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'