2011-06-20 117 views
4

我想反转LINQ to SQL查询的输出。 和.Reverse()不起作用,只是崩溃的页面。如何反转LINQ to SQL查询

protected void Page_Load(object sender, EventArgs e) 
{ 
    NewsDataContext db = new NewsDataContext(); 
    var News = from news in db.News     
       select new 
       { 
        ID = news.NewsID, 
        kort = news.Short 
       }; 

    foreach (var newa in News) 
    { 
     Panel1. 
     Controls. 
     Add(new LiteralControl(newa.kort + 
           "</br>" + 
           "<a href=Full.aspx?id=" + 
           newa.ID + 
           ">Read The full Article</a>")); 
    } 
} 

有没有其他方法可以将其逆转?

+1

*“.... Reverse()不工作,只是崩溃的页面。”* - 如何告诉我们的原因崩溃? 'Reverse()'起作用,听起来像是代码中的问题。 –

+0

它表示“查询运算符'Reverse'不受支持。” 但它现在解决了 –

回答

6

我猜SQL Server不知道如何将Reverse转换成T-SQL命令,所以你会得到一个异常。您可能需要从数据库中提取查询结果,然后然后将其撤销。

var News = (from news in db.News     
       select new 
       { 
       ID = news.NewsID, 
       kort = news.Short 
       }).AsEnumerable().Reverse(); 
+0

伟大的解决它谢谢 –

+0

@StriplingWarrior和@ DaveShaw的答案是更好的*通用解决方案这个问题。 –

+0

将适当的排序子句添加到查询中肯定是解决您的特定问题的适当方法。只要确保你知道你的查询是在你的数据库上执行(反向将爆炸),当你在内存中,并且可以完全访问所有的linq方法 –

13

如果它是你正在试图表明,为什么不使用的排序依据(或OrderByDescending)得到你想要的顺序的项目,而不是在数据库中的聚簇索引的顺序相反的消息。

我想不出任何需要在Linq to Sql中使用Reverse的情况。

例(抱歉,如果语法如果关闭,我更喜欢的Lamda的):

var News = 
    (from news in db.News 
    orderby news.Date descending     
    select new 
     { 
       ID = news.NewsID, 
       kort = news.Short 
     }); 
+1

+1,好得多内存中的解决方案。 –

+0

使用这一个谢谢大家的快速回复 –

+0

如果你需要接下来的另一个领域(即日期然后ID)排序,你可以用逗号分隔字段(或者如果你使用的是Lamda的,那么“ThenBy”)。 – DaveShaw

5

的问题是:你在倒车?

SQL存储未在新闻表中定义特定的顺序,因此只是在没有任何定义的顺序的情况下“反转”查询的结果是没有意义的。

这样的事情呢?

var News = from news in db.News  
      order by news.PostedTime descending    
      select new 
      { 
       ID = news.NewsID, 
       kort = news.Short 
      };