[英]Linq with join need distinct rows by ID
我得到多行組合。 我需要具有唯一 VendorCod 的唯一供應商行。
代碼:
IQueryable<VendorModel> vendors = (from vendor in _context.Vendor
join vp in _context.VendorProduct on vendor.Pkid equals vp.VendorId
where vp.ProductId == ProductId
select new VendorModel()
{
VendorId = vendor.Pkid,
Name = vendor.Name,
VendorCode = vendor.VendorCode,
FacilityId = 0,
ClientId = 0,
Active = vendor.Active ?? false,
UpdatedAt = vendor.UpdatedAt,
DeletedAt = vendor.DeletedAt
});
您有許多供應商的產品,因此您必須應用適當的謂詞並且不需要連接。
通過導航屬性:
var vendors =
from vendor in _context.Vendor
where vendor.Products.Any(vp => vp.ProductId == ProductId)
select new VendorModel
{
VendorId = vendor.Pkid,
Name = vendor.Name,
VendorCode = vendor.VendorCode,
FacilityId = 0,
ClientId = 0,
Active = vendor.Active ?? false,
UpdatedAt = vendor.UpdatedAt,
DeletedAt = vendor.DeletedAt
};
或者,如果您沒有導航屬性:
var vendors =
from vendor in _context.Vendor
where _context.VendorProduct.Any(vp => vendor.Pkid == vp.VendorId && vp.ProductId == ProductId)
select new VendorModel
{
VendorId = vendor.Pkid,
Name = vendor.Name,
VendorCode = vendor.VendorCode,
FacilityId = 0,
ClientId = 0,
Active = vendor.Active ?? false,
UpdatedAt = vendor.UpdatedAt,
DeletedAt = vendor.DeletedAt
};
您需要對您的產品進行分組並檢查是否與代碼匹配
IQueryable<VendorModel> vendors = (from vendor in _context.Vendor
join vp in _context.VendorProduct on vendor.Pkid equals vp.VendorId into vpg
where vpg.Any(vp => vp.ProductId == ProductId)
select new VendorModel()
{
VendorId = vendor.Pkid,
Name = vendor.Name,
VendorCode = vendor.VendorCode,
FacilityId = 0,
ClientId = 0,
Active = vendor.Active ?? false,
UpdatedAt = vendor.UpdatedAt,
DeletedAt = vendor.DeletedAt
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.