Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C实体框架CS1941_C#_Entity Framework_Linq - Fatal编程技术网

C# C实体框架CS1941

C# C实体框架CS1941,c#,entity-framework,linq,C#,Entity Framework,Linq,我正在尝试将linq与实体框架结合使用。在下面的代码中,第一个连接是红色的波形,我有这个错误 严重性代码说明项目文件行抑制状态 错误CS1941 join子句中一个表达式的类型为 不准确的调用“Join”时类型推断失败 代码 编辑: 在注释并意识到我的错误代码之后,我决定添加我的实体类。 当我运行我的项目时,实体框架在Sql Server上创建Id和root_Id列,然后我考虑可以使用Resultset.root等于Words.Id结构 public class Word{ [Key]

我正在尝试将linq与实体框架结合使用。在下面的代码中,第一个连接是红色的波形,我有这个错误

严重性代码说明项目文件行抑制状态 错误CS1941 join子句中一个表达式的类型为 不准确的调用“Join”时类型推断失败

代码

编辑:

在注释并意识到我的错误代码之后,我决定添加我的实体类。 当我运行我的项目时,实体框架在Sql Server上创建Id和root_Id列,然后我考虑可以使用Resultset.root等于Words.Id结构

public class Word{
   [Key]
    public int Id { get; set; }
   ...}

 public class Result{
   [Key]
    public int Id { get; set; }
    public virtual Word root { get; set; }
   ...}

public class Result{
   [Key]
    public int Id { get; set; }
    public virtual Result result { get; set; }
   ...}
和上下文类

public class DatabaseContext : DbContext{
 ...
 public DbSet<Word>        Words               { get; set; }
 public DbSet<Result>      Results             { get; set; }
 public DbSet<Sens>        Senses              { get; set; }
 ...
}
Id和root类型不兼容,但当我使用兼容的类型更改查询时,问题仍在继续。我会出什么问题。谢谢问候语有不同的类型。检查一下。 也许它们是int和long或者其他什么

从@OzanTopal:


有关更多信息,请查看此链接:

您正在加入3个表,但结果只是:

选择o

你参加的目的是什么

检查上面的答案,如果是不同类型的,也检查此答案:

on o.Id equals r.root
on r.Id equals s.Id 
r.val== SomeVal

此错误是因为检测和结果类型的Id属性不兼容。它们不必是一样的。例如,从编译器的角度来看,一个是int,另一个是long是可以的。但是,例如,字符串和int或Guid或int是不兼容的。解决方案是使这两种类型即使不相同也兼容。我理解您可能无法这样做,因为您的实体模型可能是从现有数据库构建的,并且您可能没有权限或不想更改列的基本类型

如果要解决代码本身的编译问题,则必须执行显式类型转换:

var vals = (from o in db.Words 
            join r in db.Results 
            on o.Id equals r.root   
            join s in db.Senses on r.Id equals Convert.ToString(s.Id)
            where r.val== SomeVal
            select  o ).Take(10);

这假设Result类的Id属性是string,而Sense类的Id是一些数字类型。

我们不知道Words、Results等返回的类型是什么。有关更多信息,请查看@Tekin Güllü
var vals = (from o in db.Words 
            join r in db.Results 
            on o.Id equals r.root   
            join s in db.Senses on r.Id equals Convert.ToString(s.Id)
            where r.val== SomeVal
            select  o ).Take(10);