我有以下表格:插入项目到DataGrid中
我使用实体框架数据库第一,因此会生成以下实体类:
public partial class Sal1 {
public string SaleID { get; set; }
public string ItemID { get; set; }
public int Quantity { get; set; }
public decimal Total { get; set; }
public virtual Item Item { get; set; }
public virtual Sale Sale { get; set; }
}
然后把SAL1行如下这样的数据网格:
private List<Sal1> saleItems = new List<Sal1>();
...
var query = from sa in db.Sal1
where sa.SaleID.Equals(tempSale)
select sa;
foreach(Sal1 si in query) {
saleItems.Add(si);
}
...
dgDetails.ItemsSource = saleItems;
但它tu RNS出这样的:
我的问题是,我应该怎么调整上面的查询,使我得到了下面的SQL相当于:
select T0.SaleID, T0.ItemID, T1.Name, T0.Quantity, T0.Total
from Sal1 T0 inner join Item T1 on T0.ItemID = T1.ItemID;
在此先感谢。
编辑:我似乎已经找到了解决办法,但我不得不这样做:
var query = from sa in db.Sal1
where sa.SaleID.Equals(tempSale)
select new { sa.SaleID, sa.ItemID, sa.Item.Name,
sa.Item.Manufacturer, sa.Quantity, sa.Total };
我不得不改变saleItems到对象的类型。
private List<object> saleItems = new List<object>();
这是最好的方法吗?
还有一件事(除了我的回答和下面的评论):EF已经自动创建了一个名为'Sal1'的类,它将数据库表中的所有表列作为类属性。因此,在LINQ查询中执行类似'select sa'的操作将返回'Sal1'对象的集合,因为从db.Sal中的sa查询的第一部分已经告诉LINQ关于'sa'的__type__。但是,当您执行JOIN时,您(通常)选择属于不同表的列,因此生成的__rows__不是特定类型。因此LINQ即时创建一个新类型。 – dotNET 2013-04-04 11:09:46