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 di Devicebadan adalah dari jenis List<long>. Ketika saya mengubahnya menjadi long[](array panjang) itu berhasil!