0

どうやら、次のコードを使用するとエラーが発生しました。と言いました:

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();
}
4

2 に答える 2

3

using を選択すると、匿名型select newが作成されます。クエリでクラスに射影する必要があります。Session

select new Session
{
....

ただし、Sessionクラスがデータベース/データ コンテキスト内のテーブルを表す場合は、そのクラスに投影することはできません。代わりに、一時クラスを作成して、選択内容をそのクラスに投影する必要があります。

編集 (質問が編集されたため)

を選択new SessionConsumerListして を返しIEnumerable<Session>ているので、メソッド シグネチャを変更して を返す必要があります。IEnumerable<SessionConsumerList>

于 2013-03-05T09:14:24.027 に答える
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);
于 2013-03-06T00:19:20.103 に答える