【发布时间】:2016-08-12 21:05:58
【问题描述】:
我在数据库 Order 和 OrderDetails 中有两个表。我将它们加入到 Linq 查询中,但只从 Orders 表中提取数据。我也有相应的类——ABOrders:
[Table("[Order]")]
public partial class ABOrder
{
[Key]
public int OrderID { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
public DateTime OrderDate { get; set; }
}
问题是 OrderDate 带有日期和时间,我只需要它作为 ShortDate 格式的字符串。最初我尝试过:
var result = (from a in ctx.Order
join b in ctx.OrderDetails on a.OrderId Equals b.OrderId
where a.Field1.Equals(id) && b.Field1.Contains("TEST")
select new myClass.ABOrder
{
OrderId = a.OrderId,
Field1 = a.Field1,
Field2=a.Field2,
OrderDate = String.Format("MM/dd/yyyy", a.OrderDate)
};
但是出错了,所以我创建了一个新类:
[Table("[Order]")]
public partial class CDOrder
{
[Key]
public int OrderID { get; set; }
public string Field1 { get; set; }
public string Field2 { get; set; }
public string OrderDate { get; set; }
}
并尝试了以下 Linq 查询:
var result = (from a in ctx.Order
join b in ctx.OrderDetails on a.OrderId Equals b.OrderId
where a.Field1.Equals(id) && b.Field1.Contains("TEST")
select new myClass.ABOrder
{
OrderId = a.OrderId,
Field1 = a.Field1,
Field2=a.Field2,
OrderDate = a.OrderDate
}).AsEnumerable().Select(x => new myClass.CDOrder
{
OrderId = x.OrderId,
Field1 = x.Field1,
Field2=x.Field2,
OrderDate = String.Format("MM/dd/yyyy", x.OrderDate)
});
现在我收到错误:
实体类型“ABOrder”和“CDOrder”不能共享表“Order”,因为它们不在同一个类型层次结构中,或者它们之间没有有效的一对一外键关系和匹配的主键。
我怎样才能完成我想要的 - 从 Order 表中检索所有数据,但使用短格式的数据?
附:在向用户显示数据时我无法进行任何调整,所以我必须在我的查询中这样做
【问题讨论】:
-
您正在取回一个日期时间对象。当您真正想向用户显示它们时,只需调用 .ToString("MM/dd/yyyy")
-
我最初尝试这样做,但就是这样,在向用户显示时我无法进行任何调整
-
不只是从类
CDOrder中删除属性[Table("[Order]")]可以解决上述情况下的问题,还是需要将其识别为数据库的一部分才能使该查询起作用? -
我试过了,得到一个新错误:无法在 LINQ to Entities 查询中构造实体或复杂类型“myCLass.DAL.ABOrder”
标签: c# linq asp.net-web-api