API - Entity Framework Core 2.1 возвращает дочернюю информацию - PullRequest
0 голосов
/ 27 февраля 2019

Я написал API Core 2.1, который пытаюсь получить информацию о типе дочернего теста для теста.

Вот родительский класс модели TestInfo:

 public partial class TestInfo
{

    public int TestId { get; set; }
    public string TestShortDescription { get; set; }
    public string TestLongDescription { get; set; }
    public int TestTypeId { get; set; }
    public int? TestLimitsId { get; set; }
    public ICollection<TestTypeInfo> TestTypeInfos { get; set; }
}

Здесьэто дочерний класс модели TestTypeInfo:

public partial class TestTypeInfo
{
    [ForeignKey("TestInfo")]
    public int TestTypeId { get; set; }
    public string TestTypeShortDescription { get; set; }
    public string TestTypeLongDescription { get; set; }
    public TestInfo TestInfo { get; set; }
}

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

[HttpGet]
    public IEnumerable<TestInfo> GetTestInfo()
    {
        var testinfo = _context.TestInfo.Include(t => t.TestTypeInfos);
        return _context.TestInfo.Include(t => t.TestTypeInfos).ToList();
    }

Проблема в том, что возвращаемая информация о типе теста основана на TestInfo TestID, а не TestInfo TestTypeID.Пожалуйста, смотрите изображение ниже.Может кто-нибудь сказать мне, как вернуть информацию о типе теста на основе TestInfo TestTypeID теста.

enter image description here

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Вот пример явного кодирования, который я получил для работы:

  [HttpGet]
    public IEnumerable<TestInfo> GetTestInfo()
    {

       List<TestInfo> tstinfoIn = _context.TestInfo.ToList();
       List<TestTypeInfo> tsttypinfoIn = _context.TestTypeInfo.ToList();
       List<TestInfo> tstinfoComboOut = new List<TestInfo>();

       tstinfoComboOut = tstinfoIn
                       .Select(c => new TestInfo()
                       {
                           TestId = c.TestId,
                           TestShortDescription = c.TestShortDescription,
                           TestLongDescription = c.TestLongDescription,
                           TestTypeId = c.TestTypeId,
                           TestLimitsId = c.TestLimitsId,
                           TestTypeInfos = GetTestTypeInfo(tsttypinfoIn, c.TestTypeId)
                       })
                       .ToList();

        return tstinfoComboOut; 
    }

Вот метод GetTestTypeInfo для извлечения потомков:

 public static List<TestTypeInfo> GetTestTypeInfo(List<TestTypeInfo> tsttypinfoIn, int parentTestTypeId)
    {
        return tsttypinfoIn
                .Where(c => c.TestTypeId == parentTestTypeId)
                .Select(c => new TestTypeInfo
                {
                    TestTypeId = c.TestTypeId,
                    TestTypeShortDescription= c.TestTypeShortDescription,
                    TestTypeLongDescription = c.TestTypeLongDescription
                })
                .ToList();
    }

Пожалуйста, дайте мне знать, если есть лучший способсделать это ...

0 голосов
/ 27 февраля 2019

Обновленный ответ на основе вашей дополнительной информации.

[HttpGet]
public IEnumerable<TestInfo> GetTestInfo()
{
    return _context.TestInfo
        .Select(c => new TestInfo()
        {
            TestId = c.TestId,
            TestShortDescription = c.TestShortDescription,
            TestLongDescription = c.TestLongDescription,
            TestTypeId = c.TestTypeId,
            TestLimitsId = c.TestLimitsId,
            TestTypeInfos = c.TestTypeInfos.Where(x => x.TestTypeId == c.TestTypeId).ToList()
        })
        .ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...