【问题标题】:SQL Server Query and convert to LinqSQL Server 查询并转换为 Linq
【发布时间】:2018-10-08 21:40:57
【问题描述】:

我确实有 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# sql linq


【解决方案1】:

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

【讨论】:

  • 嗯,猜猜不是大卫布朗。它不识别 e.File.BinaryFile.Binary;。猜猜我必须穿过所有的结构吗?
  • 这完全取决于您的 EF 型号。将其添加到问题中。
  • 它已更新,需要像上面那样检索我的 Binary 属性
猜你喜欢
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 2018-09-18
  • 2014-11-16
  • 2014-08-14
  • 1970-01-01
相关资源
最近更新 更多