Группировать список по свойству, а затем возвращать только другое свойство этого сгруппированного объекта - PullRequest
0 голосов
/ 11 марта 2020

У меня есть список контрактов, и я собираю их вместе по clientId. Но я хочу вернуть только идентификатор контракта.

Input => 
let c1 = {client:1,id:"c1"}
let c2 = {client:2,id:"c2"}
let c3 = {client:2,id:"c3"}
let c4 = {client:1,id:"c4"}
let c5 = {client:3,id:"c5"}
let list = [c1,c2,c3,c4,c5]

Желаемый результат:

[[c1.id,c4.id],[c2.id,c3.id],[c5.id]]

У меня есть следующая функция, но она возвращает две подгруппы по своему ключу (который является единственным доступная вещь, которую я вижу до сих пор)

 public JsonResult checkForSameClient(long[] listOfContracts)
    {


        IQueryable<ContratEspace> contrats = contratEspaceRepository.Get(1, listOfContracts.Count(), listOfContracts);
        var contratList = contrats.ToList();

        var finalArray = contrats.GroupBy(c => c.id_clientGestion).ToList();
            var answer = finalArray.Select(c=>c.Key).Distinct().ToList();

        return new JsonResult() { Data = answer };
    }

Ответы [ 2 ]

1 голос
/ 11 марта 2020

Когда вы используете GroupBy, вы получаете IGrouping, который состоит из Key группы, а также IEnumerable членов группы. Поскольку вы просто хотите id_contrat от каждого участника, вам нужно выбрать его, сохраняя группы.

var answer = contrats.GroupBy(c => c.id_clientGestion)
                     .Select(cg => cg.Select(c => c.id_contrat));
0 голосов
/ 11 марта 2020

publi c JsonResult checkForSameClient (long [] listOfContracts) {

Я смог понять это. Я использовал метод выбора и создал новый объект только с желаемыми свойствами, а затем сгруппировал по нему.

    IQueryable<ContratEspace> contrats = contratEspaceRepository.Get(1, listOfContracts.Count(), listOfContracts);
    var contratList = contrats.ToList();

        var answer = contrats.Select(i => new { i.id_contrat, i.id_clientGestion }).GroupBy(i=>i.id_clientGestion).ToList();

    return new JsonResult() { Data = answer };
}
...