ASP.NET MVC查询lambda表达式



你好,我在一个查询中有问题。为什么总是没有返回的价值。

public List<UserDetail> userSearchModel(UserSearchModel searchModel)
    {
        string userid = User.Identity.GetUserId();
        var user = _dbContext.UserDetails.Where(x => x.Id == userid);
        var result = _dbContext.UserDetails.Except(user).ToList().AsQueryable();          
        if (searchModel != null)
        {
            if (searchModel.LanguageId.Count() != 0)
            {
                List<UserDetailLanguage> usrDetails = new List<UserDetailLanguage>();
                foreach (var item in searchModel.LanguageId)
                {
                    var details = _dbContext.UserDetailLanguages.Where(x => x.LanguageId == item).ToList();
                    foreach (var item2 in details)
                    {
                        usrDetails.Add(item2);
                    }
                }            
                result = result.Where(x => x.UserDetailLanguages == usrDetails);
            }
        }         
        return result.ToList();
    }

我想在usrdetails列表和结果中获得相同的结果。在Result.userdetaillanguages中,我有记录等于usrdetails的记录,但这不想检索。

这是我的模型:

public class UserDetail
{
    public UserDetail()
    {
        this.UserDetailLanguages = new HashSet<UserDetailLanguage>();
    }
    [Key, ForeignKey("User")]
    public string Id { get; set; }
    public DateTime Birthday { get; set; }
    public string Sex { get; set; }
    public string Country { get; set; }
    public string About { get; set; }
    [NotMapped]
    public int Age { get { return DateTime.Now.Year - Birthday.Year; } }
    public virtual ApplicationUser User { get; set; }
    public virtual ICollection<UserDetailLanguage> UserDetailLanguages { get; set; }
}
public class UserDetailLanguage
{
    public Int32 Id { get; set; }
    public virtual UserDetail UserDetail { get; set; }
    public string UserDetailId { get; set; }
    public virtual Language Language { get; set; }
    public Int32 LanguageId { get; set; }
    public Boolean IsKnown { get; set; }
    public static implicit operator List<object>(UserDetailLanguage v)
    {
        throw new NotImplementedException();
    }
}
public class Language
{
    public Language()
    {
        this.UserDetailLanguages = new HashSet<UserDetailLanguage>();
    }
    public int Id { get; set; }
    public string Value { get; set; }
    public string Name { get; set; }
    public virtual ICollection<UserDetailLanguage> UserDetailLanguages { get; set; }
}

我做错了什么?

如果要查看您的值是否在列表中,则使用列表的包含函数 - 如下:

  result = result.Where(x => usrDetails.Contains(x.UserDetailLanguage));

如果您想查看两个列表中是否有任何项目,则可以使用这样的交叉点:

 result = result.Where(x => usrDetails.Intersect(x.UserDetailLanguage).Count() > 0);

看起来您在以下代码中检查列表之间的平等

result = result.Where(x => x.UserDetailLanguages == usrDetails);

这可能不起作用,要检查列表的平等,您可以使用

之类的东西
Enumerable.SequenceEqual(FirstList.OrderBy(fList => fList), 
                     SecondList.OrderBy(sList => sList))

最新更新