如何在linq列表中分组并在c#linq中连接一些字符串
我有一个名为“HoldItems”的域实体,我创建了一个HoldItems对象列表 HoldItems上的所有属性都是:如何在linq列表中分组并在c#linq中连接一些字符串,c#,linq,C#,Linq,我有一个名为“HoldItems”的域实体,我创建了一个HoldItems对象列表 HoldItems上的所有属性都是: public int TransactionNo; public int TransactionID; public int ItemNo; public String ItemName; public int Qty; public double Price; public double TotalPrice; public double DiscountPrice; pu
public int TransactionNo;
public int TransactionID;
public int ItemNo;
public String ItemName;
public int Qty;
public double Price;
public double TotalPrice;
public double DiscountPrice;
public int ItemType;
public bool VatInclude;
public double VatPrice;
public string Note;
public List<HoldExtraMenu> ExtraMenuList;
public string BelongCategoryName;
public int BelongItemNo;
public int BelongItemIndex;
public int BelongCategoryID;
现在的问题是,我需要根据BelongCategoryName对这个结果进行分组,并使用add“,”连接ItemName的输出列。您可以实现如下要求:
var resultSet =
results.GroupBy(e => e.BelongCategoryName)
.ToDictionary(e => e.Key,
g => string.Join(",", g.Select(a => a.ItemName)));
resultSet
现在是一个字典
或者,如果要将上述查询链接到已启动的查询:
var results = (from myobject in selectedItemList
where myobject.ItemType == 5
where myobject.BelongItemIndex == selectedItemList.IndexOf(C)
orderby myobject.BelongCategoryName
group myobject by myobject.BelongCategoryName)
.ToDictionary(e => e.Key,
g => string.Join(",", g.Select(a => a.ItemName)));
或仅使用查询语法:
var results = from myobject in selectedItemList
where myobject.ItemType == 5
where myobject.BelongItemIndex == selectedItemList.IndexOf(C)
orderby myobject.BelongCategoryName
group myobject by myobject.BelongCategoryName into h
select new
{
BelongCategoryName = h.Key,
ItemNames = string.Join(", ", from e in h select e.ItemName)
};
非常感谢你的帮助。很好用。@SithijaSahan不客气。如果你不喜欢方法语法,我还提供了一个只支持查询语法的版本。我需要一些帮助,同时我可以得到ItemPrice的总和吗?Thanks@SithijaSahan当然你想要一个
字典
还是一个匿名类型,有两个属性BelongCategoryName
和价格之和?第二种方法更好,有两个属性,我检查了你的上一个代码块,它工作正常,输出显示为“BelongCategoryName”和“ItemNames”,我认为最好有这种类型的输出,例如:BelongCategoryName、ItemName、TotalPrice等
var results = from myobject in selectedItemList
where myobject.ItemType == 5
where myobject.BelongItemIndex == selectedItemList.IndexOf(C)
orderby myobject.BelongCategoryName
group myobject by myobject.BelongCategoryName into h
select new
{
BelongCategoryName = h.Key,
ItemNames = string.Join(", ", from e in h select e.ItemName)
};