Как правильно соединить две таблицы, чтобы получить доступ к свойству в одной из сущностей? - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю над веб-API, используя EntityFramework. EntityFramework построен как отдельный проект. В API у меня есть следующая модель:

namespace Web_API.Models
{
    [Table("SomeFiles")]
    public class SomeFilesViewModel
    {
        [Key]
        public int FileId { get; set; }
        public int PatchNumber{ get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
    }
}

А в EF у меня есть следующие сущности:

namespace SomeDataAccess
{
    public partial class Patch
    {
        public int PatchID { get; set; }
        public double Number { get; set; }
    }

    public partial class PatchFile
    {
        public int FileID { get; set; }
        public int PatchID{ get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
    }
}

Как я могу реализовать метод GET, используя LINQ, чтобы вернуть список файлов между двумя Patch числами (не идентификаторами исправлений)? Ниже приведено то, что у меня есть, но «Число» не указано в качестве свойства файлов, хотя я к нему присоединился.

public async Task<IHttpActionResult> GetSomeFileViewModels(double StartingPatch, double EndingPatch)
{
    var files = from pf in _context.PatchFiles
                join p in _context.Patches on pf.PatchID equals p.PatchID
                select pf;

    var patchFiles = await files.Where(i => i.Number(???) >= StartingPatch & i.Number <= EndingPatch)
                                .Select(someFiles => new SomeFileViewModel
                                {
                                    FileId = files.FileID,
                                    PatchNumber = (???),
                                    Name = files.Name,
                                    Type = files.Type,
                                }).ToListAsync();

    return !patchFiles.Any()
           ? (IHttpActionResult)NotFound()
           : Ok(patchFiles);
}

1 Ответ

0 голосов
/ 05 ноября 2018

Вам нужно исправить заявление Select. В настоящее время вы только что получили pf, который PatchFiles. Вы можете выбрать анонимный тип с помощью оператора select следующим образом:

select new { PatchFile = pf, Patch = p};

Ваш запрос должен выглядеть примерно так:

var files = (from pf in _context.PatchFiles
             join p in _context.Patches on pf.PatchID equals p.PatchID
             select new { PatchFile = pf, Patch = p}).ToList();

Тогда вы можете:

files.Where(i => i.Patche.Number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...