LINQ: Fill objects from left join

前端 未结 4 1052
無奈伤痛
無奈伤痛 2020-12-12 00:40

I\'m new to linq. How do I load my objects using LINQ from a left join database query (PostGIS).

This is my database query:



        
4条回答
  •  不知归路
    2020-12-12 01:01

    So - if I understand right - you have a database query that you are happy with, but you want to take the row-column shaped result and project it into a hierarchically shaped result.


    Suppose the results are in a List

    public class Row
    {
      public int id {get;set;}
      public string type {get;set;}
      public int attid {get;set;}
      public string label {get;set;}
      public int? attvalueid {get;set;}
      public string value {get;set;}
    }
    

    Then you would group twice, and turn each top-level group into a Type, each child-level group into an Attribute and each row into a Value (if the row is not an empty value).

    List queryResult = GetQueryResult();
    
    //make our hierarchies.
    var groups = queryResult
      .GroupBy(row => new {row.id, row.attid})
      .GroupBy(g => g.Key.id);
    
    //now shape each level
    List answer =
    (
      from typeGroup in groups
      let typeRow = typeGroup.First().First()
      select new Type()
      {
        id = typeRow.id,
        type = typeRow.type,
        Attributes =
        (
          from attGroup in typeGroup
          let attRow = attGroup.First()
          select new Attribute()
          {
            id = attRow.attid,
            label = attRow.label
            Values =
            (
              from row in attRow
              where row.attvalueid.HasValue  //if no values, then we get an empty array
              select new Value() {id = row.attvalueid, value = row.value }
            ).ToArray()
          }
        ).ToArray()
      }
    ).ToList();
    

提交回复
热议问题