我的数据库中有以下用户类,其中有两个关系,其中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 { 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引用,忘了放它。
答案 0 :(得分:1)
包含system.data.entity,您可以使用Queryable.Include<T, TProperty>
代替Include(string)
string X = ...
var result = dbContext.Users
.Include(user => user.Profile)
.Where(user => user.Sign == X);
顺便提一下,您的查询会选择完整的用户和完整的配置文件,如果您只打算使用一些属性,这会浪费处理能力。在这种情况下,我建议使用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
{
...
}
});