我正在尝试构建一个相当简单的 winform 应用程序,以从多个不同的系统加载类似的数据,然后在不同的 View /报告中显示数据。我是第一次使用 Entity Framework,我不确定这些“报告” View 如何适合 ORM 框架。
该模型非常基础,名为Trade 的基本抽象类被实现为几个具有系统特定数据的具体类。我明白这一点,并且我可以在数据网格中显示所有交易,显示为基类或具体实现(例如 SystemATrade ),如果用户想要查看其他字段(感谢这个 SO question )。
public abstract class BaseTrade
{
[Key, Column(Order=0)]
public string SourceSystem { get; set; }
[Key, Column(Order = 1)]
public string TradeID {get; set;}
public DateTime TradeDate { get; set; }
public string Buy_Sell { get; set; }
public decimal Quantity { get; set; }
public decimal Price { get; set; }
}
public partial class SystemATrade : Trade
{
public string Field1 { get; set; }
public string Field2 { get; set; }
}
public partial class SystemBTrade : Trade
{
public string Field3 { get; set; }
public string Field4 { get; set; }
}
public class TradeComplianceContext : DbContext
{
public DbSet<BaseTrade> Trades { get; set; }
public TradeComplianceContext() { }
}
现在我想添加一些自定义 View ,例如在 TradeDate 和 Quantity 上自联接 Trades 以显示与此类似的相关交易:
_context = new TradeComplianceContext();
var query = from t1 in _context.Trades
join t2 in _context.Trades on
new
{
Quantity = t1.Quantity,
TradeDate = t1.TradeDate
} equals
new
{
Quantity = t2.Quantity,
TradeDate = t2.TradeDate
}
where
t1.Buy_Sell.Equals("P") && t2.Buy_Sell.Equals("S")
select new
{
t1.SourceSystem,
t1.TradeDate,
t1.Quantity,
t1.TradeID,
t1.Price,
t1.TraderID,
t1.TraderName,
T2_TradeID = t2.TradeID,
T2_Price = t2.Price,
T2_TraderID = t2.TraderID,
T2_TraderName = t2.TraderName
};
return query.ToList();
该代码当前存在于我的业务逻辑层中,并向 UI 层返回一个列表,该 UI 层将列表分配给 DataGrid.DataSource。它有效,但似乎不正确。是否更愿意为 linq 查询中嵌入的匿名类型创建一个 POCO 并将此逻辑移动到 DAL?这会用 EDMX 文件完成吗?它可以与 CodeFirst POCO 并行吗?
次要:如果可能的话,我喜欢做一个类似于 BaseTrade/SystemATrade 的多态报告,如果用户更愿意将报告视为 SystemATrade 而不仅仅是 BaseTrade,则包括额外的继承字段。
最佳答案
你能解释一下为什么查询返回的数据不正确吗?这将有助于指出问题。是的,您可以创建一个 POCO 以使其更易于维护,但如果查询中存在缺陷,创建 POCO 将无法修复它。
关于c# - 使用 EF 实体显示自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13406393/