2013-03-05 99 views
0

顯然,如果使用下面的代碼,我得到一個錯誤。它說:Linq在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 2013-03-06 04:40:28

3

您正在使用select new,這將創建一個anonymous type選擇,你需要投射到Session類查詢等。

select new Session 
{ 
.... 

但要記住,如果你的Session類是代表一個表中您的數據庫/數據上下文,則無法投射到這個類,而是你可能必須創建一個臨時類和項目的選擇到類。

編輯(因爲現在已編輯的問題)

現在你選擇new SessionConsumerList和你正在返回IEnumerable<Session>,您需要修改方法簽名返回IEnumerable<SessionConsumerList>

+0

我已經添加臨時類。但我需要返回查詢,我不能返回作爲query.ToList() – Supermode 2013-03-06 00:15:48

+0

@Supermode,檢查編輯部分的答案,你需要修改方法簽名... – Habib 2013-03-06 04:29:07