我使用了Entity Framework并为我的数据库生成了edmx。生成的模板类表示每个表。我有一个生成的类'Table',我从中将其中的12个属性中的4个复制到了一个新的接口'ITableModel'。
var tables = (from t in db.Tables
orderby t.DateReceived descending
select t).Take(100);
var list = tables.AsEnumerable().Cast<ITableModel>().ToList();
正如你可以猜测的那样,演员抛出了一个无效的广播例外。这里的目标是删除我需要传递给我的视图(MVC3)的信息并创建表示该信息的视图类。从我收集的内容来看,这是最好的做法,但我反对这种铸造的墙。任何帮助将不胜感激!
答案 0 :(得分:1)
如果您不需要Table中的所有数据,则无需从数据库传输它们。您可以使用:
public class MyProjection : ITableModel
{
public int SomeField { get; set; }
public string SomeField2 { get; set; }
}
并将您的查询称为:
var list = db.Tables
.OrderByDescending(t => t.DateReceived)
.Take(100)
.Select(t => new MyProjection
{
SomeField = t.SomeField,
SomeField2 = t.SomeField2
})
.ToList();
Cast
只有在重写运算符以进行转换时才有可能,但它需要具体类型,因为运算符必须创建目标类型的实例。