我有项目清单
我想将它们推回到类似的列表中,这也意味着我想按重复项的最高数量进行排序。
让我知道如何使用LINQ和C#做到这一点。
谢谢大家
编辑2显示代码:
List<game> inventory = new List<game>(); drinkingforDataContext db = new drinkingforDataContext(); foreach (string item in tbTitle.Text.Split(' ')) { List<game> getItems = (from dfg in db.drinkingfor_Games where dfg.game_Name.Contains(tbTitle.Text) select new game { gameName = dfg.game_Name, gameID = Boomers.Utilities.Guids.Encoder.EncodeURLs(dfg.uid) }).ToList<game>(); for (int i = 0; i < getItems.Count(); i++) { inventory.Add(getItems[i]); } } var items = (from xx in inventory group xx by xx into g let count = g.Count() orderby count descending select new { Count = count, gameName = g.Key.gameName, gameID = g.Key.gameID }); lvRelatedGames.DataSource = items; lvRelatedGames.DataBind();
此查询显示以下结果:
它给了我数量和名称,但没有给我游戏的ID。
它应该显示:
您可以使用“分组依据” +“排序依据”。详细信息请参见LINQ 101
var list = new List<string> {"a", "b", "a", "c", "a", "b"}; var q = from x in list group x by x into g let count = g.Count() orderby count descending select new {Value = g.Key, Count = count}; foreach (var x in q) { Console.WriteLine("Value: " + x.Value + " Count: " + x.Count); }
针对 此帖子(现已删除):
如果您有一些自定义对象的列表,则需要使用自定义比较器或按特定属性分组。
查询也无法显示结果。向我们显示完整的代码以获得更好的帮助。
根据您的最新更新:
您具有以下代码行:
group xx by xx into g
由于xx是自定义对象系统,因此不知道如何将一项与另一项进行比较。正如我已经写过的,您需要指导编译器并提供一些将用于对象比较的属性或提供自定义比较器。这是一个例子:
请注意,我使用 Foo.Name 作为键-即将根据 Name 属性的值对对象进行分组。
有一个问题-您根据对象的名称将2个对象视为重复对象,但是Id呢?在我的示例中,我只是获取组中第一个对象的ID。如果您的对象具有不同的ID,则可能是一个问题。
//Using extension methods var q = list.GroupBy(x => x.Name) .Select(x => new {Count = x.Count(), Name = x.Key, ID = x.First().ID}) .OrderByDescending(x => x.Count); //Using LINQ var q = from x in list group x by x.Name into g let count = g.Count() orderby count descending select new {Name = g.Key, Count = count, ID = g.First().ID}; foreach (var x in q) { Console.WriteLine("Count: " + x.Count + " Name: " + x.Name + " ID: " + x.ID); }