Kesalahan juga menunjukkan ini:

LINQ to Entities tidak mengenali metode 'System.Collections.Generic.List`1[System.String] GetRoleById(Int32)', dan metode ini tidak dapat diterjemahkan ke dalam ekspresi toko.

Saya hanya ingin membuat daftar elemen di mana Role dari User sama dengan Bereichsleitung.

GetRoleByID mengembalikan List dari string

 var model =
                db.Urlaubantrag.OrderByDescending(x => x.Jahr)
                    .Where(a => userdao.GetRoleById(a.Urlauber_ID).Contains("Bereichsleitung"))
                    .ToPagedList(page, pageSize);
            return View(model);

Adakah yang punya ide di mana masalah sebenarnya?

1
Eden 12 Mei 2021, 12:46

3 jawaban

Jawaban Terbaik

Pertama, ini bukan LINQ to Entities, ini LINQ to SQL. Dan masalah - LINQ to SQL tidak dapat menerjemahkan metode GetRoleById ke dalam kode sql.

Anda dapat memuat semua data dari tabel dan memfilter dalam kode seperti ini:

 var model =
             db.Urlaubantrag.OrderByDescending(x => x.Jahr)
                 .ToArray()
                 .Where(a => userdao.GetRoleById(a.Urlauber_ID).Contains("Bereichsleitung"))
                 .ToPagedList(page, pageSize);

Cara ini sangat tidak optimal, karena memuat banyak baris yang dapat difilter.

Jadi, Anda perlu menganalisis GetRoleById Anda dan menggantinya dengan metode, yang dapat diterjemahkan ke sql.

1
Backs 12 Mei 2021, 09:51

Cara termudah untuk menghindari Linq-To-Entities mencoba menerjemahkannya ke SQL adalah dengan menggunakan AsEnumerable. Tetapi perhatikan bahwa Anda kemudian memfilter di memori dan bukan di database:

 var model = db.Urlaubantrag
    .OrderByDescending(x => x.Jahr)
    .AsEnumerable()
    .Where(a => userdao.GetRoleById(a.Urlauber_ID).Contains("Bereichsleitung"))
    .ToPagedList(page, pageSize);
0
Tim Schmelter 12 Mei 2021, 09:53

Anda tidak dapat memanggil metode di dalam ekspresi. Anda harus terlebih dahulu mewujudkan kueri yang Anda rujuk terlebih dahulu dan kemudian menggunakan daftar terwujud dalam kueri.

0
Amit Kotha 12 Mei 2021, 09:51