Фильтрация из списка C # или LINQ - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь отфильтровать из attachList идентификатор taxheaderID, он исходит из моей базы данных, которая структурирована как таковая.

public int attachmentID { get; set; }
public int headerID { get; set; }
public string uploadedfilename { get; set; }
public string originalfilename { get; set; }
public string foldername { get; set; }

Вот код, который получает данные из базы данных:

public JsonResult GetAllAttach()
{
    using (car_monitoringEntities contextObj = new car_monitoringEntities())
    {
        var attachList = contextObj.car_taxcomputationattachment.ToList();
        return Json(attachList, JsonRequestBehavior.AllowGet);
    }
}

Это мои попытки:

attachList
    .Select(x => x.headerID)
    .Where(x => x == x)
    .Take(1);

и:

attachList = attachList
    .Where(al => attachList
        .Any(alx => al.taxheaderID == alx.headerID 
                 && al.headerID == alx.headerID));

Проблема в том, что я хочу проанализировать несколько вложений по одному headerID или отфильтровать их на основе headerID.Например:

Проблема, которую нужно исправить:

Это таблица

Желаемый вывод: Комбинированный

таблица данных: таблица данных таблица данных 2

Вот фактическое решение, которое было принято для получения вывода, но мой коллега сказал мне, что это нехорошая практика, поэтому я пытаюсь отфильтровать его в самой функции.извиняюсь за беспокойство, спасибо!

<div ng-repeat="att in attach|filter:{headerID:header.headerID}:true">

      <a href="~/UploadedFiles/{{att.uploadedfilename}}" download="{{att.uploadedfilename}}" target="_blank">{{att.uploadedfilename}} <br /></a>

 </div>

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Чтобы получить вложения по идентификатору

public JsonResult GetAllAttach(int headerId)
{
    using (car_monitoringEntities contextObj = new car_monitoringEntities())
    {
        var attachList = contextObj.car_taxcomputationattachment
                                   .Where(x => x.headerID == headerId)
                                   .ToList();
        return Json(attachList, JsonRequestBehavior.AllowGet);
    }
}

Если вы хотите, чтобы все данные были в одном результате JSON, необходимо создать модель вложенного представления.

0 голосов
/ 17 апреля 2019

Предполагая, что у вас есть идентификатор заголовка, по которому вы хотите фильтровать локальную переменную, вы почти правы

int headerIdToFind = 19;
// think of x as a local variable inside a foreach loop which
// iterates over each item in the attachList (it does not exist 
// outside the where method)
// this is what you got wrong when you compared the item to itself
var filteredAttach = attachList.Where(x => x.headerId = headerIdToFind);

// if you want to select only some properties based on header id
// you can use select to project those properties
var filteredAttach = attachList.Where(x => x.headerId = headerIdToFind).
                      Select(x => new {x.attachmentId, x.folderName});

// based on last image, you only want to select (project) header id and the 
// filename. so you do not need where (filter) at all
// you can put all the properties you need in the select clause
var filteredAttach = attachList.Select(x => new {x.headerId, x.attachmentId});
// you can enumerate the filtered attach list of convert it into a list 
var filteredAttach = filteredAttach.ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...