C# C语言中集合的子和#
我在C#中有一个项目集合,具有两个属性:productName和Volume。我想通过productname在此集合上执行subsum以获取卷。在SQL中,它将如下所示: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
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对集合和列表都有效吗?@SeanList
s是集合。它们继承自ICollection
。另外,GroupBy
是IEnumerable
的一个扩展,它继承了ICollection
的内容。这适用于ObservableCollection还是仅仅是一个简单的列表?它适用于任何实现IEnumerable
的类,其中包括ObservableCollection
,我已经尝试过了,但它不起作用。请看我上面编辑的问题。是否需要将结果存储在相同的pieData
变量中?啊,我没有调用pieData实例。谢谢但现在它不喜欢DataItem不是一个静态类。这适用于ObservableCollection还是一个简单的列表?它适用于任何实现IEnumerable
的类,其中包括ObservableCollection
,我已经尝试过了,但它不起作用。请看我上面编辑的问题。是否需要将结果存储在相同的pieData
变量中?啊,我没有调用pieData实例。谢谢但是现在它不喜欢DataItem不是静态类。谢谢,我不理解语法!谢谢,我不懂语法!