LINQ to Entities中的Distinct子句

13

我想在下面的代码中添加一个distinct,但是我无法弄清确切的语法。提前致谢。

var testdates = (from o in db.FMCSA_ME_TEST_DATA
                 orderby o.DATE   
                 select new
                 {
                    RequestDate = o.DATE
                 });
3个回答

20

使用Distinct()扩展方法。

请注意,Distinct()可能会取消现有的orderby(我在LINQ to SQL中注意到了这一点),因此您可能希望在之后使用OrderBy()方法。

var testdates = (from o in db.FMCSA_ME_TEST_DATA
                 select new
                 {
                     RequestDate = o.DATE
                 }).Distinct().OrderBy(x => x.RequestDate);

你确定Distinct()会对排序产生反向作用吗?我没有看到这种行为(运行了类似的查询),如果真的发生了,我会非常惊讶。 - Adam Rackis
@Adam - 我在使用LINQ to SQL时遇到了OrderBy/Distinct问题,但这可能不是其他LINQ提供程序的问题。请参见http://programminglinq.com/blogs/marcorusso/archive/2008/07/20/use-of-distinct-and-orderby-in-linq.aspx。 - Greg
哇 - 不知道那个 bug。我希望在 EF4 中已经修复了,但无论如何它都不应该影响 这个 查询。感谢您的发布。 - Adam Rackis
@Adam - 是的,这很烦人 - 特别是因为 IQueryable 在理论上意味着您可以针对各种提供程序使用相同的查询。但在实践中,您必须注意此类错误(或拔光头发)。 - Greg

3
var testdates = (from o in db.FMCSA_ME_TEST_DATA
                 orderby o.DATE   
                 select new
                 {
                    RequestDate = o.DATE
                 }).Distinct();

关键在于用括号将查询包裹起来,这样你就可以调用distinct方法了。你已经做到了这一点,所以你只需要在最后添加方法调用即可。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接