Saya mendapatkan kesalahan ini untuk kueri di bawah ini
Tidak dapat membuat nilai tipe konstan
API.Models.PersonProtocol
. Hanya tipe primitif atau tipe enumerasi yang didukung dalam konteks ini
ppCombined
di bawah ini adalah IEnumerable
objek PersonProtocolType
, yang dibangun oleh concat dari 2 PersonProtocol
daftar.
Mengapa ini gagal? Kita tidak bisa menggunakan LINQ JOIN
klausul dalam SELECT
dari JOIN
?
var persons = db.Favorites
.Where(x => x.userId == userId)
.Join(db.Person, x => x.personId, y => y.personId, (x, y) =>
new PersonDTO
{
personId = y.personId,
addressId = y.addressId,
favoriteId = x.favoriteId,
personProtocol = (ICollection<PersonProtocol>) ppCombined
.Where(a => a.personId == x.personId)
.Select( b => new PersonProtocol()
{
personProtocolId = b.personProtocolId,
activateDt = b.activateDt,
personId = b.personId
})
});
c#
linq
entity-framework
join
pengguna2515186
sumber
sumber
Jawaban:
Ini tidak dapat berfungsi karena
ppCombined
kumpulan objek di memori dan Anda tidak dapat bergabung dengan satu set data dalam database dengan set data lain yang ada di memori. Anda bisa mencoba mengekstrak item yang difilterpersonProtocol
darippCombined
koleksi dalam memori setelah Anda mengambil properti lain dari database:sumber
Tidak tahu apakah ada yang mencari ini. Saya memiliki masalah yang sama. Pilih pada kueri dan kemudian melakukan di mana (atau bergabung) dan menggunakan variabel pilih memecahkan masalah bagi saya. (Masalahnya ada di koleksi "Reintegraties" untuk saya)
Semoga ini bisa membantu siapa saja.
sumber
zv.this.Reintegraties.FirstOrDefault().Id
NullReferenceException potensialDalam kasus saya, saya dapat menyelesaikan masalah dengan melakukan hal berikut:
Saya mengubah kode saya dari ini:
Untuk ini:
sumber
p1
danp2
keduanya dalam memori apakah mereka dinyatakan secara anonim atau dengan nama variabel.Perlu ditambahkan, karena sampel kode OP tidak memberikan konteks yang cukup untuk membuktikan sebaliknya, tetapi saya menerima kesalahan ini juga pada kode berikut:
Rupanya, saya tidak bisa menggunakan
Int32.Equals
dalam konteks ini untuk membandingkan Int32 dengan int primitif; Saya harus (dengan aman) mengubah ini:sumber
Equals
sangat baik.Cukup tambahkan AsEnumerable () danToList (), sehingga terlihat seperti ini
sumber
Saya memiliki masalah ini dan apa yang saya lakukan dan memecahkan masalah adalah bahwa saya menggunakan
AsEnumerable()
sebelum klausa Gabung saya. ini pertanyaan saya:Saya bertanya-tanya mengapa masalah ini terjadi, dan sekarang saya pikir itu karena setelah Anda membuat kueri melalui LINQ , hasilnya akan ada di memori dan tidak dimuat ke objek, saya tidak tahu apa itu keadaan tetapi mereka berada di dalam beberapa keadaan transisi saya pikir. Kemudian ketika Anda menggunakan
AsEnumerable()
atauToList()
, dll, Anda menempatkan mereka ke dalam objek memori fisik dan masalah terselesaikan.sumber