C# 使用Linq根据属性对对象列表进行分组?
我有一个目标:C# 使用Linq根据属性对对象列表进行分组?,c#,.net,list,linq,group-by,C#,.net,List,Linq,Group By,我有一个目标: public class SiteInfo { public string Title { get; set; } public string URL { get; set; } public string Type { get; set; } } 我正在使用它创建列表: var sites=新列表() 然而,我想做的是在序列化之前按类型对站点进行分组。这是否可以使
public class SiteInfo
{
public string Title { get; set; }
public string URL { get; set; }
public string Type { get; set; }
}
我正在使用它创建列表:
var sites=新列表()
然而,我想做的是在序列化之前按类型对站点进行分组。这是否可以使用LINQ或其他方法实现。听起来您想要的是:
// No need to sort sites first
var grouped = sites.OrderBy(x => x.Type)
.GroupBy(x => x.Type);
var grouped = sites.OrderBy(x => x.Type)
.GroupBy(x => x.Type)
.Select(g => new { Type = g.Key,
Sites = g.Select(site => new {
site.Title,
site.URL
} });
然后只需序列化分组
。然而,我不知道在JSON中,I分组
会是什么样子。。。每种情况下都会出现这种类型。您可能需要以下内容:
// No need to sort sites first
var grouped = sites.OrderBy(x => x.Type)
.GroupBy(x => x.Type);
var grouped = sites.OrderBy(x => x.Type)
.GroupBy(x => x.Type)
.Select(g => new { Type = g.Key,
Sites = g.Select(site => new {
site.Title,
site.URL
} });
我想这会给你一个更好的JSON结构。这个
var sites = new List<SiteInfo>()
{
new SiteInfo(){Title="1",Type="a",URL="http://aaaa"},
new SiteInfo(){Title="2",Type="b",URL="http://bbbb"},
new SiteInfo(){Title="3",Type="a",URL="http://aaaa"},
new SiteInfo(){Title="4",Type="b",URL="http://bbb"},
};
var json = new JavaScriptSerializer().Serialize(sites.GroupBy(s => s.Type));
或
var json = new JavaScriptSerializer().Serialize(sites.GroupBy(s => s.Type)
.ToDictionary(x=>x.Key,x=>x));
会产生
[
[{"Title":"1","URL":"http://aaaa","Type":"a"},{"Title":"3","URL":"http://aaaa","Type":"a"}],
[{"Title":"2","URL":"http://bbbb","Type":"b"},{"Title":"4","URL":"http://bbb","Type":"b"}]
]
{
"a":[{"Title":"1","URL":"http://aaaa","Type":"a"},{"Title":"3","URL":"http://aaaa","Type":"a"}],
"b":[{"Title":"2","URL":"http://bbbb","Type":"b"},{"Title":"4","URL":"http://bbb","Type":"b"}]
}
下面是一个简单的控制台应用程序,它可以满足您的需要:
static void Main(string[] args)
{
List<SiteInfo> sites = new List<SiteInfo>()
{
new SiteInfo() { Title = "Site A", Type = "Whatever 2" },
new SiteInfo() { Title = "Site B", Type = "Whatever 1" },
new SiteInfo() { Title = "Site C", Type = "Whatever 1" },
new SiteInfo() { Title = "Site D", Type = "Whatever 3" },
new SiteInfo() { Title = "Site E", Type = "Whatever 3" }
};
var sitesGroupedByType =
sites.GroupBy(s => s.Type).Select(g => new { Type = g.Key,
Sites = g.Select(site => new
{
site.Title,
site.URL
})});
foreach (var siteTypeGroup in sitesGroupedByType.OrderBy(g => g.Type))
{
foreach(var site in siteTypeGroup.Sites)
{
Console.WriteLine(string.Format("Type => {0}, Title => {1}",
siteTypeGroup.Type, site.Title));
}
}
Console.ReadKey();
}
首先,我将查看所有LINQ方法的列表,并查看其中是否有与分组功能相关的方法。如果你这样做,
GroupBy
将有望脱颖而出-1明确表示没有投入任何研究工作。