首页 > 解决方案 > SQL Server 查询并转换为 Linq

问题描述

我确实有 4 张桌子:

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

我需要使用 Linq 检索某个文件的二进制文件,但该文件必须与我在方法 public ActionResult GetEntityFileById(int?EntityId) 中收到的 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; }
    }

标签: c#sqllinq

解决方案


假设您有一个带有导航属性的 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();

推荐阅读