C# 拆分集合linq实体框架

C# 拆分集合linq实体框架,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个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

我有一个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>();
    }
}

第一个GroupBy将
PropertyValue的列表按
PropertyId
进行拆分,然后将此分组转换为以
PropertyId
为键的字典

我们的字典的每个记录的值都是通过创建一个新的字典组成的,其中键是
PropertyValueId
,值是
value

PropertyValues.GroupBy( k => k.PropertyId )
    .ToDictionary( k => k.First().Value, 
          k => k.ToDictionary( p => p.PropertyValueId, p => p.Value ) );

现在,数据按您的需要进行结构化。

您能提供一点文本(表格)表示您期望的结果吗?请参阅编辑,我添加了如何查看json。请参阅答案please@GertArnold它是一个PropertyValueId,表示行idnice。它是有效的。我也尝试过这样做,但是使用.Select(p=>newkeyvaluepair())时,每次使用exeption“LINQ to Entities中只支持无参数构造函数和初始值设定项”时,它都会崩溃。@nickzdravcov LINQ to entity尝试转换sql中的所有表达式。无法转换类型KeyValuePair或is KeyValuePair(键,值)构造函数(不支持)。
            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);
[{
{"colors": [{"5", "Black"}, {"7", "White"}]}, 
{"brands": [{"78", "Q&Q"}, {"24", "Adidas"}]},
}]
PropertyValues.GroupBy( k => k.PropertyId )
    .ToDictionary( k => k.First().Value, 
          k => k.ToDictionary( p => p.PropertyValueId, p => p.Value ) );