C#LINQ查询-无隐式转换错误

C#LINQ查询-无隐式转换错误,c#,linq,entity-framework,C#,Linq,Entity Framework,我已经为我的LINQ查询定义了以下实体类: public class Application { public Application() { } public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public System.DateTime DateTimeCreated { get; set; }

我已经为我的LINQ查询定义了以下实体类:

public class Application
{
    public Application() { }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public System.DateTime DateTimeCreated { get; set; }
    public System.DateTime? DateTimeModified { get; set; }
    public Employee CreatedBy { get; set; }
    public Employee ModifiedBy { get; set; }
}

public class Employee
{
    public Employee() { }

    public string EmployeeID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
我创建了以下查询以创建
应用程序
对象,并尝试为
CreatedBy
和“ModifiedBy”属性创建
Employee
实体。有时,
ModifiedBy
列可能包含null,我想将
ModifiedBy
属性设置为null

var query = from a in context.Applications
            join u1 in context.Employees on a.CreatedBy equals u1.Employee_ID.Trim()
            join u2 in context.Employees on a.ModifiedBy equals u2.Employee_ID.Trim()  
            where a.ApplicationId == applicationId
            select new Entity.Application
            {
                Id = a.ApplicationId,
                Name = a.ApplicationName,
                Description = a.ApplicationDesc,
                DateTimeCreated = a.DateTimeCreated,
                CreatedBy = new Entity.Employee{ EmployeeID = a.CreatedBy, FirstName = u1.First_Name, LastName = u1.Last_Name },
                DateTimeModified = a.DateTimeModified ?? null,
                ModifiedBy = (a.ModifiedBy != null) ? new Entity.Employee { EmployeeID = a.ModifiedBy, FirstName = u2.First_Name, LastName = u2.Last_Name } : (Entity.Employee) null,
             };  
调试上面的查询时,出现以下错误:

无法确定条件表达式的类型,因为存在 “员工”和“应用程序”之间没有隐式转换


如何解决此错误?

它可能不会直接解决您遇到的错误,但您根本不需要该查询,因为您已经设置了导航属性。改用
Include
,它应该可以正常工作-EF将为您加入必要的连接:

var query context.Applications
                 .Include("ModifiedBy")
                 .Include("CreatedBy")
                 .Where(a => a.ApplicationId == applicationId);

我注意到了几件事

 join u1 in context.Employees on a.CreatedBy equals u1.Employee_ID.Trim()
 join u2 in context.Employees on a.ModifiedBy equals u2.Employee_ID.Trim()
您不能这样加入,因为
CreateBy
ModifiedBy
属于
Employee
类型,而不是
string

另外,请看以下内容:

 (Entity.Employee) null
您不能将null强制转换为
员工
。您可能希望将来使用该类型的默认值:

 default(Entity.Employee)
更新


正如评论中所指出的,将null强制转换为
Entity.Employee
,是合法的,但由于最终的结果是null,因此该操作没有多大意义
default(Entity.Employee)
也会导致null,因为这是引用类型的默认值,但是
default
可以为各种其他类型提供不同的值,这有时是有用的。

经过一些额外的研究后,下面是经过修改的代码片段,它最终对我有用:

var result = (from a in context.Applications
               join u1 in context.Employee on a.CreatedBy equals u1.Employee_ID.Trim()
               join u2 in context.Employee on a.ModifiedBy equals u2.Employee_ID.Trim() into us
               from u2 in us.DefaultIfEmpty()
               where a.ApplicationId == applicationId
               select new Entity.Application()
               {
                   Id = a.ApplicationId,
                   Name = a.ApplicationName,
                   Description = a.ApplicationDesc,
                   DateTimeCreated = a.DateTimeCreated,
                   CreatedBy = new Entity.Employee
                   {
                       EmployeeID = a.CreatedBy,
                       FirstName = u1.First_Name,
                       LastName = u1.Last_Name
                   },
                   DateTimeModified = a.DateTimeModified ?? null,
                   ModifiedBy = new Entity.Employee
                   {
                       EmployeeID = a.ModifiedBy ?? string.Empty,
                       FirstName = u2.First_Name ?? string.Empty,
                       LastName = u2.Last_Name ?? string.Empty
                   }
               }).Single();

什么是字段/属性
ApplicationId
——应该是
Id
?因此,如果删除这一行,上面的查询可以工作吗<代码>ModifiedBy=(a.ModifiedBy!=null)?new Entity.Employee{EmployeeID=a.ModifiedBy,FirstName=u2.First\u Name,LastName=u2.Last\u Name}:(Entity.Employee)null,@nate-是的,当我删除了你评论中引用的行时,我已经克服了这个错误。我同意
加入
,但你肯定可以将
null
转换为
实体。Employee
。的确如此!我一定是在C之前的日子里提出了一些假设!上下文应用程序表中的
CreatedBy
ModifiedBy
列定义为字符串。我正在执行连接以从上下文
employee
view@MichaelKniskern为什么在您的
应用程序
模型中会出现
Employee
类型的字段?当我尝试查看此查询的结果视图时,我在调试模式下收到以下消息:无法计算子项。