Pengecualian semasa pertanyaan: "Tidak boleh mencipta nilai tetap jenis API.Models.PersonProtocol. Hanya jenis primitif atau terbilang disokong dalam konteks ini."
Punca PuncaMasalah khusus ialah koleksi ppCombined mewakili data dalam ingatan, manakala pertanyaan dilaksanakan terhadap data dalam pangkalan data. Dua set data tidak boleh digabungkan.
Penyelesaian
Pertanyaan diubah suai
Kaedah
<code class="language-csharp">var persons = db.Favorites .Where(f => f.userId == userId) .Join(db.Person, f => f.personId, p => p.personId, (f, p) => new // 匿名对象 { personId = p.personId, addressId = p.addressId, favoriteId = f.favoriteId, }) .AsEnumerable() // 数据库查询在此处结束,其余部分是内存中的查询 .Select(x => new PersonDTO { personId = x.personId, addressId = x.addressId, favoriteId = x.favoriteId, personProtocol = ppCombined .Where(p => p.personId == x.personId) .Select(p => new PersonProtocol { personProtocolId = p.personProtocolId, activateDt = p.activateDt, personId = p.personId }) .ToList() });</code>
memastikan bahawa pertanyaan pangkalan data selesai sebelum meneruskan dengan pertanyaan dalam memori. Ini membolehkan koleksi ppCombined ditapis dan ditayangkan dalam ingatan selepas mendapatkan semula data pangkalan data. AsEnumerable()
Atas ialah kandungan terperinci Mengapa Pertanyaan LINQ Saya Gagal Apabila Menyertai dengan Jenis Bukan Primitif dalam Klausa SELECT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!