拆分集合linq实体框架
本文关键字:框架 实体 linq 集合 拆分 | 更新日期: 2023-09-27 18:04:03
我有一个代表产品属性的PropertyValues实体:
public enum Property { Color = 1, Brand, Size }
public class PropertyValue
{
public int PropertyValueId { get; set; }
public Property PropertyId { get; set; }
public string Value { get; set; }
public ICollection<Product> Products { get; set; }
public PropertyValue()
{
Products = new HashSet<Product>();
}
}
因为我们有结束序列的产品属性,我创建了一个枚举属性保持属性。我试图实现以下结果-根据属性拆分集合。其中值为另一个Dictionary
Dictionary<Property, Dictionary<int, string>> dict = new Dictionary<Property, Dictionary<int, string>>()
{
new KeyValuePair<Property, Dictionary<int, string>>()
{
{
Property.Color,
new KeyValuePair<int, string>()
{
{ 5, "white" }, // ProperyValueId, Value
{ 6, "green"}
}
}
}
}
我一直看着GroupBy和SelectMany,但没有找到一个方法。现在我有以下内容:
var query = await db.PropertyValues
.OrderBy(prop => prop.PropertyId)
.Where(prop => prop.PropertyId == Property.Brand)
.ToDictionaryAsync(prop => prop.PropertyValueId, prop => prop.Value);
Dictionary<Property, Dictionary<int, string>> properties = new Dictionary<Property, Dictionary<int, string>>();
properties.Add(Property.Brand, query);
应该返回一个json。但首先需要得到序列。Json应该是这样的:
[{
{"colors": [{"5", "Black"}, {"7", "White"}]},
{"brands": [{"78", "Q&Q"}, {"24", "Adidas"}]},
}]
第一个GroupBy将PropertyValues
的列表按PropertyId
分割,然后将该分组转换为以PropertyId
为Key的字典。
我们的字典中每个记录的值是通过创建一个新字典来组成的,其中键为PropertyValueId
,值为Value
PropertyValues.GroupBy( k => k.PropertyId )
.ToDictionary( k => k.First().Value,
k => k.ToDictionary( p => p.PropertyValueId, p => p.Value ) );