Как заставить IQueryable <out T> работать с регулярным IQueryable? - PullRequest
0 голосов
/ 14 октября 2010

Я использую Linq2SQL и работаю с устаревшей системой.Система была встроена в .Net, но без слоя данных, поэтому я транскодирую ее, чтобы она была.У меня есть запрос linq, который выглядит следующим образом ...

 var data = from p in db.tblPeoples
                   orderby p.strLastName,p.strFirstName
                   select new
                   {
                       guidPersonId = p.guidPersonId,
                       strFirstName = p.strFirstName,
                       strLastName = p.strLastName,
                       strRank = p.tblCodesRank.strDescription,
                       strPhone = p.strPhone,
                       strEmail = p.strEmail,
                       strOffice = p.tblOrganization.strAcronym,
                       RolesList = p.tblRoles
                   };

, и когда я проверяю подпись var, это IQueryable, и я понятия не имею, что это такое.В моем datalayer это возвращение как IQueryable, но когда я пытаюсь использовать версию datalayer, а затем выполняю .where в возвращенном наборе данных для поиска по нему, я получаю ошибки, которые не могу преобразовать лямбда-выражение в тип 'string', потому чтоэто не тип делегата.

Что мне делать с этим?Я пытаюсь создать повторное использование кода и использовать уже написанную версию для уровня данных.версия слоя данных выглядит так:

public static IQueryable RetrieveAllPeople()
{
            var data = from p in db.tblPeoples
               orderby p.strLastName, p.strFirstName
               select new
               {
                   guidPersonId = p.guidPersonId,
                   strFirstName = p.strFirstName,
                   strLastName = p.strLastName,
                   strRank = p.tblCodesRank.strDescription,
                   strPhone = p.strPhone,
                   strEmail = p.strEmail,
                   strOffice = p.tblOrganization.strAcronym,
                   RolesList = p.tblRoles
               };

    return data;
}

1 Ответ

1 голос
/ 14 октября 2010

Ваш тип возврата должен быть IQueryable , что не совпадает с IQueryable.

Для этого вам нужно создать класс для заполнения вашего выбора вместо использования анонимного, как вы.

...