2014-10-08 85 views
0

我有一个名为Parent的实体,其中有儿童列表。 现在我想按显示顺序选择一个父母及其所有孩子。LINQ查询选择实体及其集合查询

entities:- class parent{ 
          Int id; 
          List<Child> children; 
          } 

       class Child{ 
          String name; 
          DateTime DOB; 
          Int DisplayOrder; 
          } 

早些时候,我正从使用LINQ到实体数据库父为

   context.Parents.Find(id); 

这是尽一切罚款。但现在我的需求已经改变,现在我需要通过他们的显示顺序来选择它的子订单。我怎样才能做到这一点。任何帮助表示赞赏。

更新父类: -

   class parent{ 
         public Int id; 
         public virtual List<Child> children; 
          } 

回答

1

从信息到控制器中的“列”,并命令你提供我猜你在某处使用你的children来显示它们,所以你可以使用parent.children.OrderBy(x => x.DisplayOrder).ToList()而不是简单parent.children,我想你以前有过。

更新1

而且我尽量记得Find将不包括你的孩子。所以值得去尝试这样的事情:

var parent = context.Parents.Include(x => x.children).FirstOrDefault(x => x.id = id); 
parent.children = parent.children.OrderBy(x => x.DisplayOrder).ToList(); 
+0

没有我访问model.children在我的.cshtml文件那里我用循环而不是foreach。我不能改变这就是为什么我问我是否可以从db本身按照排序顺序获得父母的孩子 – iGod 2014-10-08 14:50:22

+0

@iGod我很确定你能改变这一点,只是显示你的用法?您将能够创建另一个局部变量,您将在其中存储重新排序的**子**,并且您将能够对此进行循环。 – Vladimirs 2014-10-08 14:53:51

+0

嗨弗拉德,对你更新的评论(对不起,我正在使用)。发现包括孩子也刚刚我现在想出了这个解决方案“parent.children = parent.children.OrderBy(x => x.DisplayOrder).ToList()”。但它很好吗? – iGod 2014-10-08 14:56:54

0

你有排序的list命令,您可以发送通过此列

+0

我没有明白你的意思。我需要获取一个基于id的父母传递和所有它的孩子也通过显示顺序 – iGod 2014-10-08 14:33:17

+0

命令,但你可以使用context.Parents.Find(id).OrderBy(order => order.DisplayOrder); – ETorre 2014-10-08 14:37:10

+0

它不会工作,因为您不能在Find()之后使用orderby扩展。此外显示顺序属性是为孩子而不是父母 – iGod 2014-10-08 14:40:58

0

这是万一你确定只有一个给定ID的父母。

var parent = context.Parents.Find(id); 
parent.children = parent.children.OrderBy(cl => cl.DisplayOrder).ToList(); 
+0

我在想同样的事情。但我怀疑这是正确的方法 – iGod 2014-10-08 14:57:15

+0

@iGod肯定它的工作。但也许这不是最好的解决方案。排序parent.children本身不会工作。 – 26071986 2014-10-08 15:02:09