C# 添加Include时比较不起作用
我在数据库中得到了以下用户类,它有两个关系,其中Profile可以为nullC# 添加Include时比较不起作用,c#,entity-framework,linq,C#,Entity Framework,Linq,我在数据库中得到了以下用户类,它有两个关系,其中Profile可以为null public class User { //... public string Sign {get; set;} public long? ProfileId {get; set;} public virtual Profile Profile {get; set;} public long PersonId {get; set;} public virtual Person Person
public class User
{
//...
public string Sign {get; set;}
public long? ProfileId {get; set;}
public virtual Profile Profile {get; set;}
public long PersonId {get; set;}
public virtual Person Person { get; set;}
}
我正在尝试搜索具有X符号属性的用户。所以我要这样做:
var users = Context.Users.Where(u => String.Compare(u.Sign, X) == 0).ToList();
直到这一点起作用。但是我需要在这个搜索中包括Profile和Person,当我使用include()
方法时,对于Profile为null的用户,它会崩溃(用户不包括Profile为null的用户)
var users = Context.Users.Include("Profile").Include("Person").Where(u => String.Compare(u.Sign, X) == 0).ToList(); //stopedworking (users do not include who has Profile null)
我怎样才能做到这一点
已更新
添加虚拟引用和Id引用,忘记将其放入。包括system.data.entity,它使您能够使用而不是 顺便说一下,您的查询会选择完整的用户和完整的配置文件,如果您只计划使用几个属性,这将浪费处理能力。在这种情况下,我建议使用select:
var result = dbContext.Users
.Where(user => user.Sign == X)
.Select(user => new
{ // select only the properties you'll use after the query
...
// from the Profile, select only the properties you'll use after the query
Profiles = user.Profile.Select(profile => new
{
...
}
});
从表面上看,语法似乎一切正常。查看
用户
类,使配置文件
和个人
虚拟有什么作用吗?什么是“崩溃”和“停止工作”?伙计们,拜托,当你们想让我们修复你们的错误时,你们能提供包括堆栈跟踪和其他所有内容的错误吗?@Adamhuldsworth我忘了把它放在这里,但它确实有。TimSchmelter并没有堆栈跟踪,只是查询更改的结果。
var result = dbContext.Users
.Where(user => user.Sign == X)
.Select(user => new
{ // select only the properties you'll use after the query
...
// from the Profile, select only the properties you'll use after the query
Profiles = user.Profile.Select(profile => new
{
...
}
});