[英]GroupBy equivalent for Windows Phone
我目前正在使用共享的可移植類庫創建Win8和Wp8應用程序。 我要做的第一件事就是獲得要約清單。
public class Offer
{
string category;
....
}
這些提議中的每一個都有分配給它的有限數量的類別之一。 在我的Win8應用程序中,一旦獲得了要約列表,就可以按category
對這些要約進行分組。
var groupedOffers = offers.Items.GroupBy(item => item.category).OrderBy(item => item.Key.ToString());
不幸的是,Wp8中沒有相同的功能,否則它並不明顯。 有人知道如何在不顯式遍歷和創建組的情況下實現同一目標嗎?
var group = from p in offers.Items
group p by p.category into g
select g
offers.Items = group.ToList<Item>()
希望這會幫助您或至少給您一些想法
確保班級頂部有“ using System.Linq”。
這可能是查詢提供者施加的限制。 嘗試這個:
var groupedOffers = offers.Items
.GroupBy(item => item.category)
.AsEnumerable()
.OrderBy(item => item.Key.ToString());
或這個:
var groupedOffers = offers.Items
.AsEnumerable()
.GroupBy(item => item.category)
.OrderBy(item => item.Key.ToString());
AsEnumerable()將導致查詢的其余部分作為Linq-to-Objects處理。 這可能會帶來負面的性能,IO和/或內存損失,但有時是必需的。 例如,假設您正在對SQL Server使用EF。
第一個查詢將轉換為類似於“ SELECT * FROM People WHERE DateOfBirth ='2014-01-31'”的內容,第二個查詢將轉換為“ SELECT * FROM People”。 然后,LINQ將篩選整個人員,只產生DateOfBirth.CompareTo(today)== 0的結果。如果數據庫包含大量數據,並且生活在距離很遠的數據中心等,則意味着將整個流式傳輸。回答1個簡單查詢的數據集。 1將是更有效的b / c過濾將在源處進行,只有匹配的數據才會流回到您的.NET代碼。
如果沒有AsEnumerable,則由LINQ查詢提供程序來嘗試將LINQ表達式轉換為對您正在查詢的系統(SQL Server數據庫,MySQL,LDAP,WMI等)有意義的查詢。 一些查詢提供者和/或其底層系統對他們可以支持的查詢類型施加了限制。
作為一個可能無法很好地翻譯(並且需要AsEnumerable或ToArray)的示例,想象一下WHERE子句中的復雜表達式,查詢提供程序不容易翻譯。
var happyBirthday = Context.People.Where(x => x.DateOfBirth.Month == DateTime.Now.Month && x.DateOfBirth.Day == DateTime.Now.Day);
也許有一些提供程序會將這個表達式轉換成SQL,但是其他提供程序將拒絕它。 他們不知道如何轉換DateTime.Now.Month和DateTime.Now.Day,他們可能會在DateOfBirth字段的.Month和.Day查找中遇到麻煩。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.