【发布时间】:2010-12-12 17:13:47
【问题描述】:
我有 2 个表 Products 和 ProductDetails。 Products 包含有关我的库存的所有信息,ProductDetails 用于允许在产品价格更改生效之前在系统中更新它们。
我正在尝试编写一个简单的查询,该查询返回所有产品,并且如果在 ProductDetails 中找到匹配行且 CommenceDate 小于或等于当前日期,还会更新产品的成本和价格。到目前为止我所拥有的是:
var products = from p in Products
from pd in ProductDetails
.Where(pd => pd.ProductID == p.ID && pd.CommenceDate <= DateTime.Now)
.DefaultIfEmpty()
where p.InUse == true
select p;
我首先认为我可以通过在选择中声明一个新产品来实现我所追求的目标,例如:
var products = from p in Products
from pd in ProductDetails
.Where(pd => pd.ProductID == p.ID && pd.CommenceDate <= DateTime.Now)
.DefaultIfEmpty()
where p.InUse == true
select new Product {
ID = p.ID,
Description = p.Description,
....
Cost = pd.Cost.HasValue ? pd.Cost : p.Cost,
Price = pd.Price.HasValue ? pd.Price : p.Price,
...
};
这段代码给了我以下错误:
Explicit construction of entity type 'LINQPad.User.Product' in query is not allowed
是否有一种简单的方式来表示“退回产品并可选择替换某些属性值”?
【问题讨论】:
标签: c# linq-to-sql