2016-07-07 66 views
-2

所以,我知道我很生疏,但我從來沒有想過,儘管花了數小時嘗試不同的解決方案,這將是如此困難。我試圖從每個組中選擇最新的記錄,然後刪除特定的子句並將其綁定到網格。具有基本沒有運氣......這是我離開的:LINQ:從每個羣組中選擇最新的

var widgets = db.Updates 
      .GroupBy(c => c.widgetType) 
      .SelectMany(s => s) 
      .Where(c => c.Sold.Equals(false)) 
      .OrderByDescending(x => x.TimeStamp) 
      .FirstOrDefault(); 
     var list = new List<Update>() {widgets}; 
      widgetsGrid.DataSource = list;    
      widgetsGrid.DataBind(); 

我加入劇組列出,因爲我得到一個數據類型的錯誤,目前它只返回的所有記錄中的最後一項,而比每個組的最後一個項目。

在此先感謝您的幫助!

回答

1

OrderByDescending應該在每組的水平上。您也不需要SelectMany,因爲這會將這些組加入平面列表中。

var widgets = Updates 
     .GroupBy(c => c.widgetType) 
     .Where(c => c.Sold.Equals(false)) 
     .Select(x => x.OrderByDescending(y => y.TimeStamp).First()); 
+0

非常感謝@艾哈邁德·易卜拉欣......但仍然行不通。當我按照你的代碼運行你的代碼時,我又會得到一個數據類型異常,所以我添加了一個「ToList」,並且仍然只獲取最後一條記錄,而不是每個組的最後一條記錄。我現在有: VAR部件= db.Updates .GroupBy(C => c.widgetType) 。凡(C => c.Sold.Equals(假)) 。選擇(X => x.OrderByDescending( y => y.TimeStamp).First()); var list = new List (){widgets}; – PaulBinCT2

+0

'var list = widgets.ToList()'應該可以很好地工作..你不能使用新的列表 {widgets};' –

+0

再次感謝,@Ahmad ...我非常感激butttttttttttt ...我試過了使用ToList()和我得到一個「未知的方法」的錯誤,我似乎記得閱讀是在這種情況下的LINQ的特性。 我絕不會相信這是如此難以實現:( – PaulBinCT2

0
  var widgets = db.Updates 
     .GroupBy(c => c.widgetType) 
     .SelectMany(s => s) 
     .Where(c => c.Sold.Equals(false)) 
     .OrderByDescending(x => x.TimeStamp) 
     .Select(y=>y.First()); 

    var list = new List<Update>() {widgets}; 
     widgetsGrid.DataSource = list;    
     widgetsGrid.DataBind(); 
0

看來您需要做的關鍵是按順序排列並從列表中選擇第一項。下面是一個例子程序:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var foodOrders = new List<FoodOrder> 
     { 
      new FoodOrder { FoodName = "hotdog", OrderDate = new DateTime(2016, 7, 7) }, 
      new FoodOrder { FoodName = "hamburger", OrderDate = new DateTime(2016, 7, 6) }, 
      new FoodOrder { FoodName = "taco", OrderDate = new DateTime(2016, 7, 5) }, 
     }; 

     var mostRecentFoodOrder = foodOrders.OrderByDescending(f => f.OrderDate).First().FoodName; 
     Console.WriteLine(mostRecentFoodOrder); 

     //cmd 
     //hotdog 
     //Press any key to continue . . . 
    } 
} 

class FoodOrder 
{ 
    public string FoodName { get; set; } 
    public DateTime OrderDate { get; set; } 
} 
0
var widgets = db.Updates 
      .Where(c => c.Sold.Equals(false)) 
      .GroupBy(c => c.widgetType)  
     .Select(x => x.OrderByDescending(y => y.TimeStamp).First()).ToList(); 
     widgetGrid.DataSource = widgets; 
     widgetGrid.DataBind(); 

我已經看到了這個問題問了百倍所有網站上...這爲我工作。致謝,感謝@艾哈邁德易卜拉欣

+0

@Ahmad Ibrahim如果我還沒有完全破壞我的歡迎(我希望)...現在,這個基本功能的作品,我覺得我需要添加一個連接(或兩個)。我可以問你,如果你願意向我展示添加一個這樣的例子嗎? 許多manyyyyyyyyyyy謝謝! – PaulBinCT2