当我尝试连接多个表时,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请求有什么问题?