【发布时间】:2015-08-14 17:42:37
【问题描述】:
我正在升级一个旧程序并使用 linq 进行基本选择,以便我可以在过程中学习 linq。 我有一项重复性任务,即仅显示来自各种连接的数据是网格视图, 下面是一个示例
protected void Page_Load(object sender, EventArgs e)
{
using ( vavestockModel.vavestockEntities db = new vavestockModel.vavestockEntities())
{
var prod = (from p in db.products select p);
var prodd = (from p in db.productdetails select p);
var prode = (from p in db.product_extra_data select p);
var join1 = (from p in prod
join
pd in prodd
on p.PrStyle equals pd.StyleCode
select new {pr=p,prd=pd }).ToList();
var join2 = (from p in prod
join
pd in prodd
on p.PrStyle equals pd.StyleCode
select new { p.PrShow,p.PrPrice,pd.I_EAN_51,pd.I_EAN_50 }).ToList();
var join3 = (from p in prod
join
pd in prodd
on p.PrStyle equals pd.StyleCode
select new { flattenmodel(p),flattenmodel(pd) }).ToList();
Response.Write(join1);
GridView1.DataSource = join1;
GridView1.DataBind();
}
}
??object flattenmodel(vavestockModel.vavestockEntities en)//? here i want to pass any table row
{
string[] toren;
//foreach (var item in en.)
//{
//}
return toren;
}
join2 可以绑定到 gridview 而 join1 不能,因为它们返回实体对象。由于我必须选择所有列,为这么多表重复写入所有名称不是一个明智的选择,因此我想编写一个返回展平数据的函数。
但我发现很难继续。我的困难来了,因为我不知道在这种情况下应该返回什么并作为参数传递。有人能指出我继续前进的正确方向吗?
【问题讨论】:
-
您的域对象只是 POCO 吗?您使用哪个版本的 EntityFramework?
-
我用的是EF5,都是Framework自己生成的类。
-
相反,您应该学习导航属性和投影,这将帮助您在没有连接的情况下编写更好的查询,您不应该在实体框架中使用连接。
-
你的实体对象到底有什么问题?它们不能被序列化?另外,它们是否继承自 EntityObject ?
-
没有问题,我唯一要做的就是不要写我要选择的所有列名,而是创建一个返回所有列值的函数,以便它可以绑定到gridview。
标签: mysql asp.net linq entity-framework