2013-03-05 2 views
0

У меня возникла ошибка, если вы используете следующий код. Он сказал:Linq in C# с использованием IEnumerable

Невозможно имплицировать конвергент типа System.Linq.IQueryable<AnonymousType> на System.Collection.Generic.IEnumerable.

Просьба сообщить, как я могу это исправить?

public IEnumerable<Session> GetAllListDetailConsumer(string refId) 
{ 
    ObjectQuery<Session> sessions = db.Sessions; 
    ObjectQuery<SessionsList> sessionsLists = db.SessionsList; 
    var query = 
     from s in sessions 
     join sList in sessionsLists on s.ReferralListID equals sList.ReferralListID 
     where s.ReferralListID == new Guid(refId) 
     select new SessionConsumerList 
     { 
      ReferralListID = s.ReferralListID, 
      SessionServerId = s.SessionServerID, 
      ApplicationID = s.ApplicationID, 
      // ... 
      ConsumerID = sList.ConsumerID, 
      ConsumerFirstName = sList.ConsumerFirstName, 
      ConsumerFamilyName = sList.ConsumerFamilyName, 
      // ... 
     }; 
    return query.ToList(); 
} 

ответ

0

Почему не отделят создание SessionConsumerList в другом методе? Делает код намного чище. Как это:

public static SessionConsumerList CreateSessionConsumerList(
    Session s, 
    SessionsList sList) 
{ 
    return new SessionConsumerList 
    { 
     ReferralListID = s.ReferralListID, 
     SessionServerId = s.SessionServerID, 
     ApplicationID = s.ApplicationID, 
     // ... 
     ConsumerID = sList.ConsumerID, 
     ConsumerFirstName = sList.ConsumerFirstName, 
     ConsumerFamilyName = sList.ConsumerFamilyName, 
     // ... 
    }; 
} 

И потом:

var query = 
    from s in sessions 
    join sList in sessionsLists on s.ReferralListID equals sList.ReferralListID 
    where s.ReferralListID == new Guid(refId) 
    select CreateSessionConsumerList(s, sList); 
+0

благодарю вас за помощь – Supermode

3

Вы выбираете с помощью select new, который бы создать anonymous type, вам нужно проецировать классу Session в запросе, как.

select new Session 
{ 
.... 

Но помните, если ваш Session класс является представляющий таблицу в контексте базы данных/данных, то вы не можете проецировать к этому классу, а вы, возможно, придется создать временный класс и проект выбор в том, что класс.

EDIT(Поскольку теперь вопрос был отредактирован)

Теперь вы выбираете new SessionConsumerList и вы возвращаете IEnumerable<Session>, вам необходимо изменить метод подписи для возврата IEnumerable<SessionConsumerList>

+0

я уже добавить временный класс. но мне нужно вернуть запрос, и я не смог вернуться в качестве query.ToList() – Supermode

+0

@Supermode, проверьте отредактированную часть ответа, вам нужно изменить подпись метода ... – Habib

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