0

Я хотел бы запросить пользователей моего веб-сайта ... они хранятся в таблице AspNetUsers и имеют дополнительные поля, как определено в моем объекте OhansonsUser, который наследуется от IdentityUser следующим образом:MVC SqlQuery таблицы IdentityUser с поисковым вызовом и где пункт

public class OhansonsUser : IdentityUser<long, CustomUserLogin, CustomUserRole, CustomUserClaim> 
{ 
.... 
} 

Я пытаюсь сделать следующий запрос:

 var sql = @" 
SELECT * 
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Id) AS RowNum, * 
     FROM  AspNetUsers 
     WHERE  Id > 2 
    ) AS RowConstrainedResult 
WHERE RowNum >= 1 
    AND RowNum < 20 
ORDER BY RowNum 
"; 
     var users = Global.OhansonsDbContext.Database.SqlQuery<IEnumerable<OhansonsUser>>(sql).ToList(); 

И я получаю сообщение об ошибке: «тип результата«System.Collections.Generic.IEnumerable`1 [OhansonsLib. OhansonsUser] 'может не быть абстрактным и включать конструктор по умолчанию. "

Примечание: У этого есть конструктор по умолчанию.

+1

Вы пытаетесь оставить IEnumerable? 'Database.SqlQuery ' – JamieD77

+0

Да, это была основная проблема. Благодаря! –

ответ

1

Вы должны передать тип модели напрямую, а не тип коллекции, которую вы ожидаете. Затем он пытается создать экземпляр этого типа и выполнить сопоставление на основе этого типа. Таким образом, исключение создается потому, что интерфейс не является конкретным типом и никогда не может быть создан. Если вы посмотрите на документацию, он вернет тип DbRawSqlQuery<TElement>, который сам реализует IEnumerable<TElement>.

Кстати, вы также можете реализовать подкачку непосредственно с помощью Lambdas, используя Skip и Take. Пример (при условии, что DbSet в DbContext называется Users).

int pageSize = 20, pageIndex = 0; 
var users = OhansonsDbContext.Users.OrderBy(user => user.Id).Skip(pageSize * pageIndex).Take(pageSize).ToList(); 
+1

я добавил, где и порядок пунктов: Global.OhansonsDbContext.Users .гда (O => o.Id> 2) .OrderBy (O => o.Id) Пропустите (PAGESIZE * pageIndex). Возьмите (PAGESIZE) .ToList(); –

+0

@BrianRice - Да, OrderBy имеет решающее значение, и я не упоминал об этом (извините), иначе порядок сортировки по умолчанию используется в базе данных, если я не ошибаюсь. – Igor

Смежные вопросы