2010-10-14 2 views
0

Я использую Linq2SQL и работаю с устаревшей системой. Система была построена в .Net, но без datalayer, поэтому я перекодирую ее так, чтобы она была одна. У меня есть Linq запрос, который выглядит следующим образом ...Как сделать IQueryable <out T> работать с reqular IQueryable?

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 
        }; 

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

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

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; 
} 
+0

Есть ли причина, по которой вы используете анонимные классы в RetrieveAllPeople()? Кроме того, ваш IQueryable не указывает тип, не считаете ли вы необходимым захватить необходимые атрибуты? –

+0

Может ли кто-нибудь объяснить, что имеется в виду, когда компилятор выбрасывает «Невозможно преобразовать лямбда-выражение для ввода« string », потому что это не тип делегата? –

ответ

1

Ваш тип возвращаемого значения должен быть IQueryable<T>, который не является такой же, как IQueryable.

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

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