簡體   English   中英

帶連接的 Linq 需要按 ID 不同的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM