3

IEnumerable継承された型をIEnumerable基本クラスにキャストしようとしています。

以下を試しました:

var test = resultFromDb.Cast<BookedResource>();

return test.ToList();

しかし、エラーが発生します:

これらの型は変換できません。Linq to Entities は変換プリミティブ EDM タイプのみをサポートします。

関連するクラスは次のようになります。

public partial class HistoryBookedResource : BookedResource
{
}

public partial class HistoryBookedResource
{
    public int ResourceId { get; set; }
    public string DateFrom { get; set; }
    public string TimeFrom { get; set; }
    public string TimeTo { get; set; }
}

public partial class BookedResource
{
    public int ResourceId { get; set; }
    public string DateFrom { get; set; }
    public string TimeFrom { get; set; }
    public string TimeTo { get; set; }
}

[MetadataType(typeof(BookedResourceMetaData))]
public partial class BookedResource
{
}

public class BookedResourceMetaData
{
    [Required(ErrorMessage = "Resource id is Required")]
    [Range(0, int.MaxValue, ErrorMessage = "Resource id is must be an number")]
    public object ResourceId { get; set; }

    [Required(ErrorMessage = "Date is Required")]
    public object DateFrom { get; set; }

    [Required(ErrorMessage = "Time From is Required")]
    public object TimeFrom { get; set; }

    [Required(ErrorMessage = "Time to is Required")]
    public object TimeTo { get; set; }
}

私が解決しようとしている問題は、テーブルからレコードを取得し、 Entity Framework と LINQ を使用しHistoryBookedResourceて結果を得ることです。IEnumerable<BookedResource>

アップデート:

次のキャスト シームを使用すると機能しますが、foreach でループしようとするとデータが失われます。

resultFromDb.ToList() as IEnumerable<BookedResource>;

更新 2:

エンティティ フレームワークで生成されたモデルを使用して、モデル (edmx) がデータベースから作成され、edmx にはデータベース テーブルを表すクラスが含まれます。

データベースには古いBookedResourceの履歴テーブルがあり、ユーザーがこれらを見て、データベースエンティティフレームワークから古いデータを取得するために、テーブルと同じ名前のクラスを使用してdbからデータを受信することがあります。したがって、HistoryBookedResource クラスのテーブル HistoryBookedResource からデータを受け取ります。

エンティティ フレームワークはプロパティを持つ部分クラスを生成するため、それらを仮想化してオーバーライドできるかどうかはわかりません。

どんな提案でも大歓迎です。

4

2 に答える 2

6

通常AsEnumerable<T>、このような場合に使用します。

var test = resultFromDb.AsEnumerable().Cast<BookedResource>();

これには、結果全体を一度に列挙しないという利点があります (怠惰を失うことはありません)。

于 2013-11-01T20:26:21.860 に答える
4

試してみてください:

resultFromDb.AsEnumerable().Cast<BookedResource>();
于 2013-11-01T20:21:39.333 に答える