C# C语言中集合的子和#

C# C语言中集合的子和#,c#,C#,我在C#中有一个项目集合,具有两个属性:productName和Volume。我想通过productname在此集合上执行subsum以获取卷。在SQL中,它将如下所示: SELECT productName, sum(Volume) FROM collection GROUP BY productName public class Item { public string productName { get; set; } public int Volume { g

我在C#中有一个项目集合,具有两个属性:productName和Volume。我想通过productname在此集合上执行subsum以获取卷。在SQL中,它将如下所示:

SELECT 
    productName, sum(Volume)
FROM collection
GROUP BY productName
public class Item
{
    public string productName { get; set; }
    public int Volume { get; set; }
}
var result = input
             .GroupBy(item => item.productName)
             .Select(group =>
                    new Item
                    {
                        productName = group.Key,
                        Volume= group.Sum(item => item.Volume)
                    })
             .ToList();
我曾尝试使用LINQ,但它给了我一个错误,即数据没有GroupBy:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Collections.ObjectModel;
using System.Linq;

namespace PieChartDataTable
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public ObservableCollection<DataItem> sortedPieData = new ObservableCollection<DataItem>(); //creates the pie data for reference later
        Data pieData = new Data();

        public class DataItem : IComparable
        {
            public string productName { get; set; }
            public double VOLUME { get; set; }
            public static DataItem createDataItem(string productName, double VOLUME)
            {
                DataItem dataItem = new DataItem();
                dataItem.productName = productName;
                dataItem.VOLUME = VOLUME;
                return dataItem;
            }
            public int CompareTo(object obj)
            {
                DataItem dataItem = obj as DataItem;
                if (dataItem == null)
                {
                    throw new ArgumentException("Object is not a DataItem.");
                }
                return this.VOLUME.CompareTo(dataItem.VOLUME);
            }
        }

        public class Data : ObservableCollection<DataItem>
        {

            public Data()
            {
                Add(new DataItem { productName = "productName 1", VOLUME = 5 });
                Add(new DataItem { productName = "productName 2", VOLUME = 6 });
                Add(new DataItem { productName = "productName 3", VOLUME = 3 });
                Add(new DataItem { productName = "productName 3", VOLUME = 3 });
                Add(new DataItem { productName = "productName 3", VOLUME = 3 });
                //Add(new DataItem { productName = "productName 4", VOLUME = 7 });
                //Add(new DataItem { productName = "productName 5", VOLUME = 5 });
            }


            public ObservableCollection<DataItem> sortCollection()
            {
                ObservableCollection<DataItem> objSort = new
                    ObservableCollection<DataItem>(this.OrderBy(DataItem =>
                        DataItem.VOLUME));
                return objSort;
            }
        }
        public MainWindow()
        {
            InitializeComponent();
            Loaded += MainWindow_Loaded;
            var result = Data.GroupBy(item => DataItem.productName)
             .Select(group =>
                    new DataItem
                    {
                        productName = group.Key,
                        VOLUME = group.Sum(item => DataItem.VOLUME)
                    })
             .ToList();
        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {

            sortedPieData = pieData.sortCollection();
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用系统数据;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
使用System.Collections.ObjectModel;
使用System.Linq;
命名空间数据表
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
public ObservableCollection sortedPieData=new ObservableCollection();//创建饼图数据供以后参考
数据pieData=新数据();
公共类数据项:IComparable
{
公共字符串productName{get;set;}
公共双卷{get;set;}
公共静态DataItem createDataItem(字符串productName,双卷)
{
DataItem DataItem=新的DataItem();
dataItem.productName=productName;
dataItem.VOLUME=体积;
返回数据项;
}
公共整数比较(对象对象对象)
{
DataItem DataItem=obj作为DataItem;
if(dataItem==null)
{
抛出新ArgumentException(“对象不是数据项”);
}
返回this.VOLUME.CompareTo(dataItem.VOLUME);
}
}
公共类数据:ObservableCollection
{
公共数据()
{
添加(新数据项{productName=“productName 1”,卷=5});
添加(新数据项{productName=“productName 2”,卷=6});
添加(新数据项{productName=“productName 3”,卷=3});
添加(新数据项{productName=“productName 3”,卷=3});
添加(新数据项{productName=“productName 3”,卷=3});
//添加(新数据项{productName=“productName 4”,卷=7});
//添加(新数据项{productName=“productName 5”,卷=5});
}
公共可观测集合sortCollection()
{
ObservableCollection objSort=新
ObservableCollection(this.OrderBy(DataItem=>
数据项(体积);
返回objSort;
}
}
公共主窗口()
{
初始化组件();
加载+=主窗口\u加载;
var result=Data.GroupBy(item=>DataItem.productName)
.选择(组=>
新数据项
{
productName=group.Key,
VOLUME=group.Sum(item=>DataItem.VOLUME)
})
.ToList();
}
已加载无效主窗口(对象发送器、路由目标)
{
sortedPiedData=pieData.sortCollection();
}
}
}

假设您的类如下所示:

SELECT 
    productName, sum(Volume)
FROM collection
GROUP BY productName
public class Item
{
    public string productName { get; set; }
    public int Volume { get; set; }
}
var result = input
             .GroupBy(item => item.productName)
             .Select(group =>
                    new Item
                    {
                        productName = group.Key,
                        Volume= group.Sum(item => item.Volume)
                    })
             .ToList();
您需要这样做:

SELECT 
    productName, sum(Volume)
FROM collection
GROUP BY productName
public class Item
{
    public string productName { get; set; }
    public int Volume { get; set; }
}
var result = input
             .GroupBy(item => item.productName)
             .Select(group =>
                    new Item
                    {
                        productName = group.Key,
                        Volume= group.Sum(item => item.Volume)
                    })
             .ToList();

假设您的类如下所示:

SELECT 
    productName, sum(Volume)
FROM collection
GROUP BY productName
public class Item
{
    public string productName { get; set; }
    public int Volume { get; set; }
}
var result = input
             .GroupBy(item => item.productName)
             .Select(group =>
                    new Item
                    {
                        productName = group.Key,
                        Volume= group.Sum(item => item.Volume)
                    })
             .ToList();
您需要这样做:

SELECT 
    productName, sum(Volume)
FROM collection
GROUP BY productName
public class Item
{
    public string productName { get; set; }
    public int Volume { get; set; }
}
var result = input
             .GroupBy(item => item.productName)
             .Select(group =>
                    new Item
                    {
                        productName = group.Key,
                        Volume= group.Sum(item => item.Volume)
                    })
             .ToList();

您需要该类的一个实例

            Data data = new Data();
            var result = data.GroupBy(item => item.productName)
             .Select(group =>
                    new DataItem
                    {
                        productName = group.Key,
                        VOLUME = group.Sum(item => item.VOLUME)
                    })
             .ToList();​

您需要该类的一个实例

            Data data = new Data();
            var result = data.GroupBy(item => item.productName)
             .Select(group =>
                    new DataItem
                    {
                        productName = group.Key,
                        VOLUME = group.Sum(item => item.VOLUME)
                    })
             .ToList();​


请将您的代码添加到问题中添加您的C#代码或代表两个集合的示例代码。还要加上你是如何计算的,或者如果你在这一点上卡住了…@ConradFrix LINQ对集合和列表都有效吗?@Sean
List
s是集合。它们继承自
ICollection
。另外,
GroupBy
IEnumerable
的扩展,它继承了
ICollection
的内容。请将您的代码添加到问题中添加您的C代码,或代表两个集合的示例代码。还要加上你是如何计算的,或者如果你在这一点上卡住了…@ConradFrix LINQ对集合和列表都有效吗?@Sean
List
s是集合。它们继承自
ICollection
。另外,
GroupBy
IEnumerable
的一个扩展,它继承了
ICollection
的内容。这适用于ObservableCollection还是仅仅是一个简单的列表?它适用于任何实现
IEnumerable
的类,其中包括
ObservableCollection
,我已经尝试过了,但它不起作用。请看我上面编辑的问题。是否需要将结果存储在相同的
pieData
变量中?啊,我没有调用pieData实例。谢谢但现在它不喜欢DataItem不是一个静态类。这适用于ObservableCollection还是一个简单的列表?它适用于任何实现
IEnumerable
的类,其中包括
ObservableCollection
,我已经尝试过了,但它不起作用。请看我上面编辑的问题。是否需要将结果存储在相同的
pieData
变量中?啊,我没有调用pieData实例。谢谢但是现在它不喜欢DataItem不是静态类。谢谢,我不理解语法!谢谢,我不懂语法!