【发布时间】:2011-03-23 12:33:05
【问题描述】:
我有一个实体框架的数据模型,其中一些实体具有一组可用于添加额外信息的属性。一些客户希望将这些属性映射到他们自己的域模型的“真实”属性。一个示例数据模型是:
public class DataEntity {
public Guid Id { get; set; }
public virtual ICollection<Attribute> Attributes { get; set; }
}
public class DataAttribute {
public Guid Id { get; set; }
public String Name { get; set; }
public String Value { get; set; }
}
public class DataStringAttribute : DataAttribute {
public String Value { get; set; }
}
public class DataInt32Attribute : DataAttribute {
public Int32 Value { get; set; }
}
域模型示例如下:
public class DomainEntity {
public Guid Id { get; set; }
public String Name { get; set; }
public Int32 Age { get; set; }
}
我可以相当容易地在彼此之间映射实体,但我希望能够在两者之间映射 Linq 表达式,以便在客户端中,它将是 IQueryable<DomainEntity>,但它被映射到 IQueryable<DataEntity> - 对于示例:
myDomainEntities.Where(o => o.Age > 21)
可以映射到:
myDataEntities.Where(o => o.Attributes.OfType<DataInt32Attribute>()
.Any(o => o.Name = "Age" && o.Value > 21);
最好的方法是什么 - 也许编写一个遍历表达式树并将其转换为使用数据模型的 QueryProvider - Linq-to-Linq-to-EntityFramework?
谢谢。
【问题讨论】:
标签: .net linq linq-to-entities expression-trees