Запрос SQL Server и преобразование в Linq - PullRequest
0 голосов
/ 09 октября 2018

У меня есть 4 таблицы:

Entity (EntityId (PK),Name), 
MultimediaEntity(IdMultimediaEntity (PK), EntityId (FK), FileId(FK), Principal),
File ( FileId(PK),Name),
BinaryFile(FileId, Binary,FileGuid)

, и мне нужно извлечь, используя Linq, двоичный файл определенного файла, но этот файл должен соответствовать EntityId, который я получаю в своем методе public ActionResultGetEntityFileById (int? EntityId).

    select BinaryFile.Binary
    from File
    inner join BinaryFile on BinaryFile.FileId=File.FileId

    select MultimediaEntity.FileId
    from File
inner join Entity on Entity.EntityId=MultimediaEntity.EntityId

Я знаю, что мне понадобятся 2 внутренних объединения, но как я могу получить желаемый результат?

РЕДАКТИРОВАТЬ: нужно получить внутреннее объединение для получения моего двоичного свойства моей модели, любая помощь?

public ActionResult GetEntityFileById(int? EntityId) 
        {

            RecursosSearch getEntityById = (from e in db.Entity
                           join
                           t in db.EntityType on e.EntityId equals t.EntityId                          join 
                           m in db.MultimediaEntity on e.EntityId equals m.EntityId
                           where t.EntityTypeId == 2301 && e.PublishedOnInternet && e.EntityId==EntityId
                           orderby e.Name
                           select new RecursosSearch
                           {
                               Name = e.Name,
                               Biography=e.Biography,
                               Binary=(from m in db.MultimediaEntity
                                        join 
                                        e in db.Entity on e.EntityId equals m.EntityId
                                        join 
                                        f in db.File on m.FileId equals f.FileId

                           }).FirstOrDefault();

и это моя модель:

 public class RecursosSearch
    {
        public int EntityId { get; set; }
        public string Name { get; set; }
        public string Biography { get; set; }
        public byte[] Binary { get; set; }
    }

1 Ответ

0 голосов
/ 09 октября 2018

Предполагается, что у вас есть модель EF со свойствами навигации и вы просто хотите первый файл, связанный с EntityId, а затем что-то вроде этого:

var q = db.MultimediaEntity
          .Where(e => e.EntityId == EntityId)
          .Select( e => e.File.BinaryFile.Binary );


byte[] fileContents = q.FirstOrDefault();

или

var q = from e in db.MultimediaEntity
        where e.EntityId == EntityId
        select e.File.BinaryFile.Binary;

byte[] fileContents = q.FirstOrDefault();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...