C# FK上的Linq值不能为null

C# FK上的Linq值不能为null,c#,linq,lambda,C#,Linq,Lambda,使用C#MVC5 Visual studio 2015 我有一个包含以下代码的方法: public List<OffersOnPropertyViewModel> Build(string buyerId) { var filtered = _context.Properties.Where(x => x.Offers.Any(c => c.BuyerUserId == buyerId)).ToList(); var model =

使用C#MVC5 Visual studio 2015

我有一个包含以下代码的方法:

public List<OffersOnPropertyViewModel> Build(string buyerId)
    {
        var filtered = _context.Properties.Where(x => x.Offers.Any(c => c.BuyerUserId == buyerId)).ToList();
        var model = filtered.Select(c =>
        {
            var item = new OffersOnPropertyViewModel()
            {
               PropertyType = c.PropertyType,
               NumberOfBedrooms = c.NumberOfBedrooms,
               StreetName = c.StreetName,
               Offers = c.Offers.Where(d => d.BuyerUserId == buyerId).Select(x => new OfferViewModel
               {
                   Id = x.Id,
                   Amount = x.Amount,
                   CreatedAt = x.CreatedAt,
                   IsPending = x.Status == OfferStatus.Pending,
                   Status = x.Status.ToString(),
                   BuyerUserId = x.BuyerUserId
               }),
            };
            return item;
        }).ToList();
        //TODO: refactor, shorten linq, duping where clause
        return model;
    }
公共列表生成(字符串buyerId)
{
var filtered=_context.Properties.Where(x=>x.Offers.Any(c=>c.BuyerUserId==buyerId)).ToList();
变量模型=已筛选。选择(c=>
{
var item=new OffersOnPropertyViewModel()
{
PropertyType=c.PropertyType,
numberofbeddooms=c.numberofbeddooms,
StreetName=c.StreetName,
Offers=c.Offers.Where(d=>d.BuyerUserId==buyerId)。选择(x=>newofferviewmodel
{
Id=x.Id,
金额=x.金额,
CreatedAt=x.CreatedAt,
IsPending=x.Status==OfferStatus.Pending,
Status=x.Status.ToString(),
BuyerUserId=x.BuyerUserId
}),
};
退货项目;
}).ToList();
//TODO:重构、缩短linq、复制where子句
收益模型;
}
模型如下:

    public class Property
{
    [Key]
    public int Id { get; set; }

    [Required]
    public string PropertyType { get; set; }

    [Required]
    public string StreetName { get; set; }

    [Required]
    public string Description { get; set; }

    [Required]
    public int NumberOfBedrooms { get; set; }

    [Required]
    public string SellerUserId { get; set; }

    public bool IsListedForSale { get; set; }

    public ICollection<Offer> Offers { get; set; }
}
公共类属性
{
[关键]
公共int Id{get;set;}
[必需]
公共字符串属性类型{get;set;}
[必需]
公共字符串StreetName{get;set;}
[必需]
公共字符串说明{get;set;}
[必需]
公共int numberofbeddooms{get;set;}
[必需]
公共字符串SellerUserId{get;set;}
public bool IsListedForSale{get;set;}
公共ICollection提供{get;set;}
}
在DB PROFERS表中,属性id作为其FK

该方法在运行时失败,表示该值不能为null

当我一步一步地浏览时,我注意到过滤的结果(在示例中为its1result)表示offers为null。尽管查询只是根据“x.Offers”筛选结果

我只需要一种方法来检索由buyerId提供的报价的财产列表。我的方法错了吗?还是我错过了一班


谢谢

您需要在LINQ查询中添加
Include()
,以引入子对象,如下所示:

var filtered = _context.Properties.Include("Offers")
    .Where(x => x.Offers.Any(c => c.BuyerUserId == buyerId)).ToList();

您的筛选器使用
Any()
的原因是,在生成SQL查询时,这一部分形成了
WHERE
子句,并且没有包含在
SELECT

中。当然,完全忘了通过include将孩子们带进来……唉