2012-06-26 37 views
1

我試圖用mac地址對設備列表進行分組。我已經在linqpad中嘗試了這一點,它可以成功運行。但是,當我嘗試在Entity框架中運行此操作時,出現錯誤,提示「指定的方法不受支持」。從每組實體框架中選擇top 1

這裏是我的代碼:

var db = new centraliteEntitiews(); 

var network = from n in db.infoes 
       where (n.state != 2) || (n.nodeid != 0) 
       orderby n.time 
       group n by n.mac into g 
       select g.FirstOrDefault(); 
return View(network); 

我想它返回對象的名單發送給我的看法。

MACADDRESS狀態NODEID正常運行時間等

回答

0

假設它是不是支持FirstOrDefault(),你可以嘗試只將其更改爲First()。畢竟,你知道每個組中至少有一個元素,否則該組將不存在。

+1

當我第一次嘗試()我收到以下錯誤。方法'First'只能用作最終的查詢操作。請考慮在此實例中使用方法「FirstOrDefault」。 – Jonathan

+0

@Jonathan:嗯。奇。 *它* FirstOrDefault()'這是導致您的原始文章中的錯誤? (你沒說。) –

+0

對不起。是的,我最初的錯誤是使用FirstOrDefault() – Jonathan

1

嘗試......

var network = db.infoes 
    .Where(n => (n.state != 2) || (n.nodeid != 0)) 
    .GroupBy(n => n.mac) 
    .SelectMany(g => g.OrderBy(n => n.time).First()) // sort within groups instead of all inputs, select info ungrouped (1 from each) 
    .ToList() // to memory 
    .SortBy(n => n.time) // sort results (between groups) 
    .ToList(); // to memory 
+0

對不同的語法很抱歉 - 我在LINQ擴展方法中比在LINQ查詢表達式中更流暢一些。 –