2011-11-06 58 views
3

我是LINQ查询和EF的新手,我通常使用MySQL,我无法猜测如何编写真正简单的查询。EF4.1 LINQ,选择所有结果

我想从表中选择所有结果。所以,我用这样的:

ZXContainer db = new ZXContainer(); 
ViewBag.ZXproperties = db.ZXproperties.All(); 

但我看到,我必须在全部(---)内写东西。

有人能指导我如何做到这一点?如果有人有任何好的参考链接,我非常感谢。

回答

6

All()是对集合中所有元素执行的布尔评估(尽管当它到达评估为false的元素时立即返回false),例如,要确保所有ZXproperties都具有某些字段设置为true:

bool isTrue = db.ZXproperties.All(z => z.SomeFieldName == true); 

这将使isTrue为真或假。 LINQ通常是延迟加载,所以如果你直接调用db.ZXproperties,你可以直接访问所有的对象,但它不是你想要的。您可以用.ToList()加载的所有对象的变量赋值:

ViewBag.ZXproperties = db.ZXproperties.ToList(); 

,或者您可以使用下面的表达式:

ViewBag.ZXproperties = from s in db.ZXproperties 
         select s; 

这实在是没有什么不同比说:

ViewBag.ZXproperties = db.ZXproperties; 

.ToList()的优点是,如果你想对这个ViewBag.ZXproperties进行多次调用,它只需要初始化在分配变量时调用数据库。或者,如果您对数据执行了任何形式的可查询操作,例如.Where(),则会执行另一个查询,如果您已经有数据可用,则该查询不甚理想。

1

要选择一切,只需跳过.All(...),因为ZXproperties已经是一个集合。

ZXContainer db = new ZXContainer(); 
ViewBag.ZXproperties = db.ZXproperties; 

您可能希望(或者有时甚至需要)使用之前调用.ToList()在此集合...

0

你不全部采用。只需键入

ViewBag.ZXproperties = db.ZXproperties; 

ViewBag.ZXproperties = db.ZXproperties.ToList(); 
0

您可以使用此:

var result = db.ZXproperties.ToList(); 

欲了解更多有关LINQ看到101 linq sample

所有是检查所有项目和参数,所谓的lambda expression

+2

downvoter你应该解释为什么downvoting,因为我看到你低估了我的答案和Reed Copsey的答案,这两个答案都是正确的,但这不是一个好办法。 –

0

All方法用于确定收集的所有项目是否匹配某些条件。

如果你只是想所有的项目,你可以直接使用它:

ViewBag.ZXproperties = db.ZXproperties; 

如果你想要这个,立即进行评估,你可以将其转换到一个列表:

ViewBag.ZXproperties = db.ZXproperties.ToList(); 

这将迫使它立即穿过电线。

+0

+1;最清楚的一堆。 –