试图加入多个表。两个表没有直接关系。 Linq查询失败

时间:2017-10-26 08:51:07

标签: c# sql asp.net linq asp.net-core

当我尝试连接多个表时,LINQ查询有问题。其中两个没有直接关系。 我需要获得关于屏幕绑定到特定场地的所有报告(VenueId in Display)。

We have 3 classes:
public class Report
    {
        [Key]
        [Column("ReportId")]
        public long Id { get; set; }

        public Guid FromUuid { get; set; }
        public int FromMajor { get; set; }
        public int FromMinor { get; set; }

        …

    }

public class Screen
    {
        [Key]
        [Column("DisplayId")]
        public int Id { get; set; }

        [ForeignKey("Id")]
        public Display Base { get; set; }

        public string Uuid { get; set; }
        public int Major { get; set; }
        public int Minor { get; set; }

    }

public class Display
    {
        [Key]
        [Column("DisplayId")]
        public int Id { get; set; }

        public DisplayType Type { get; set; }

        public string Name { get; set; }
        public int VenueId {get; set}

         …
    }

所以我写了Linq请求:

var result =
               from r in db.Reports
               join fs in db.Screens on new { a = r.FromUuid.ToString(), b = r.FromMajor, c = r.FromMinor } equals new { a = fs.Uuid, b = fs.Major, c = fs.Minor }
               join display in db.Displays on fs.Id equals display.Id
               where fs.Base.VenueId == VenueId
                select new { Uuid = r.FromUuid, Major = r.FromMajor, Minor = r.FromMinor, StartTime = r.StartTime};

            var bla = await result.ToListAsync();

我失败了:

An unhandled exception occurred while processing the request.
InvalidCastException: Kan ikke bruke objekttypen Sys-tem.Linq.Expressions.Expression`1[System.Func`2[Microsoft.EntityFrameworkCore.Storage.ValueBuffer,<>f__AnonymousType5`3[System.String,System.Int32,System.Int32]]] som Sys-tem.Linq.Expressions.ConstantExpression.

我还写了原始sql,只是为了测试而且它可以工作

var test =  db.Reports.FromSql("SELECT 
c.FromUuid as FromUuid, c.FromMajor as FromMajor, c.FromMinor as FromMinor, " +
                 "FROM Reports AS c " +
                "LEFT JOIN screens AS b ON c.FromUuid = b.Uuid AND c.FromMajor = b.Major AND c.FromMinor = b.Minor " +
                "LEFT JOIN displays AS d ON d.DisplayId = b.DisplayId " +

               "WHERE d.VenueId = 2010")
                .ToList();

但我们想要使用Linq。

Linq请求有什么问题?

0 个答案:

没有答案