C# FK上的Linq值不能为null
使用C#MVC5 Visual studio 2015 我有一个包含以下代码的方法: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 =
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将孩子们带进来……唉