2009-06-30 28 views
3

我正在使用SQL Server 2005的快遞 我有一個日期時間字段在表巫婆包含日期和時間。Linq2Sql如何獲得所有不同的日期沒有時間部分

我想從表中忽略時間部分選擇不同的日期。

我使用了這段代碼,但順序被忽略了! (生成的sql不包含order by):

 var dates = (from c in db.Comments 
        orderby c.Time descending 
        select c.Time.Day + "/" + c.Time.Month + "/" + c.Time.Year).Distinct(); 

有關如何執行此操作的任何想法都是受歡迎的。

感謝

回答

4

使用DateTime類型的Date財產。

var dates = from c in db.Comments 
      group c by c.Time.Date into g 
      orderby g.Key 
      select g.Key; 

var dates = (from c in db.Comments 
      select c.Time.Date).Distinct().OrderBy(d => d); 

一個SQL專家可以告訴你其中哪些是更好的。

0

嘗試LinqPad,它可以讓你看到生成的SQL。玩不同的組合。

2

試試這個:

var comments = from c in db.Comments 
       select c.Time.Day + "/" + c.Time.Month + "/" + c.Time.Year).Distinct(); 

comments = comments.OrderBy(c => c.Time); 
2

排序被忽略!

是的,你指示linq命令,然後清除。 linq中的不同是破壞排序的操作。獨特後必須排序依據:

query = query.Distinct().OrderBy(x => x); 

而且,它是褻瀆使用字符串操作來執行日期邏輯。您應該使用DateTime的Date屬性進行投影。

0

如果你可以肯定的是[時間]欄不會是NULL我看不出有這種想法的任何問題和它我們「人」更易於閱讀:

var dates = (from c in db.Comments 
      orderby c.Time.Year, c.Time.Month, c.Time.Day 
      select c.Time.Day + "/" + c.Time.Month + "/" + c.Time.Year).Distinct(); 

或反向 - 年代學排序:

var dates = (from c in db.Comments 
      orderby c.Time.Year descending, c.Time.Month descending, c.Time.Day descending 
      select c.Time.Day + "/" + c.Time.Month + "/" + c.Time.Year).Distinct(); 
相關問題