2013-07-02 27 views
1

我有以下查询哪些作品,但它只是似乎错了,这可以缩短?性能下面还有不好的地方?在使用Linq EF时有很多selectMany语句是不好的做法吗?

var projectBylineIDs = _neptuneUow.Projects.FindWhere(p => p.ID == 81) 
           .SelectMany(p => p.Batches) 
           .SelectMany(i => i.Items) 
           .SelectMany(b => b.ByLines) 
           .Select(b => b.ID) 
           .ToList(); 
+0

这可能会产生很多SQL查询,请参阅此问题:http://stackoverflow.com/questions/13721623/selectmany-creates-lots-of-sql-select-statements-instead-of-one-with-join –

回答

0

在这里看不到一个坏习惯,如果你需要这样做,那么做吧。

性能如何。性能是极其上下文敏感的主题。 取决于您的代码执行的上下文,它可能是非常有害的执行非常甜蜜。

可能会问自己的问题:你是否真的需要所有这些信息,在你需要依次平坦化后?或者在服务器上运行一些StoredProcedure,然后准备好显示结果。

希望这会有所帮助。

+0

感谢您的回复,我只需要批次ID,例如最后一次选择.Select(b => b.ID),是否可以在没有所有其他选择语句的情况下得到该ID? – Xerxes

+0

@xerxes:看不到其他方式然后1)重新构建您的类以更容易地访问该属性2)如果不是,*以某种方式*(linq或不),您需要遍历内部列表才能到达该字段。所以选择更合适的方式,这符合*你的*要求(表演,memeory效率,你可以花这个时间...) – Tigran

相关问题