添加包含时比较不起作用

时间:2017-11-24 11:18:58

标签: 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 { 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引用,忘了放它。

1 个答案:

答案 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
        {
             ...
        }
    });