2013-03-05 44 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