2016-11-28 71 views
0

好的。我很难过,因为我不太了解LINQ,但这是问题所在。我有BsonDocuments的结构如下列表:使用LINQ获取BsonDocuments数并将结果放入新列表中

{ "Produce" : "apple", "CompanyName" : "Ralphs", "Link" : "www.ralphs.com" }, 
{ "Produce" : "apple", "CompanyName" : "Ralphs", "Link" : "www.ralphs.com" }, 
{ "Produce" : "apple", "CompanyName" : "Albertsons", "Link" : "www.albertsons.com" }, 
{ "Produce" : "banana", "CompanyName" : "Ralphs", "Link" : "www.ralphs.com" } 

如何查询使用LINQ找到特定数量的匹配,并将其放置在使用中的所有数据作为唯一的密钥BsonDocuments的新列表这个名单?例如,如果我是组以上的项目,我会得到:

{ "Produce" : "apple", "CompanyName" : "Ralphs", "Link" : "www.ralphs.com" }, // Count = 2 
{ "Produce" : "apple", "CompanyName" : "Albertsons", "Link" : "www.albertsons.com" }, // Count = 1 
{ "Produce" : "banana", "CompanyName" : "Ralphs", "Link" : "www.ralphs.com" } // Count = 1 

但因为我只想要一个特定的计数次数(例如2),我的最终名单应该只包含

{ "Produce" : "apple", "CompanyName" : "Ralphs", "Link" : "www.ralphs.com" }, // Count = 2 

我已经知道如何使用针对MongoDB数据库的聚合框架来做到这一点,但我想知道如何尽可能在LINQ中在内存中执行此操作。非常感谢您的帮助。

回答

0

试试这个代码:

class Class1 
    { 
     public string Produce { get; set; } 
     public string CompanyName { get; set; } 
     public string Link { get; set; } 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     List<Class1> lst = new List<Class1>(); 
     lst.Add(new Class1() { Produce = "a", CompanyName="b", Link="c" }); 
     lst.Add(new Class1() { Produce = "a", CompanyName = "b", Link = "c" }); 
     lst.Add(new Class1() { Produce = "a", CompanyName = "d", Link = "c" }); 
     lst.Add(new Class1() { Produce = "e", CompanyName = "b", Link = "c" }); 

     var result = lst.GroupBy(x => x.Produce + x.CompanyName + x.Link).Select(g => new { Produce = g.First().Produce, 
      Company = g.First().CompanyName, 
      Link = g.First().Link, 
      Count = g.Count() 
     }).ToList(); 

    } 
+0

似乎并没有工作。我得到一个500错误。 – Ray

+0

在哪行代码出错?进行调试。 –

相关问题