简体   繁体   English

带连接的 Linq 需要按 ID 不同的行

[英]Linq with join need distinct rows by ID

I am getting multiple rows of combination.我得到多行组合。 I need Unique Vendor rows with unique VendorCod.我需要具有唯一 VendorCod 的唯一供应商行。

Code:代码:


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
                               });

You have many products for a vendors, so you have to apply appropriate predicate and no joins are needed.您有许多供应商的产品,因此您必须应用适当的谓词并且不需要连接。

Via navigation property:通过导航属性:

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
   };

Or if you do not have navigation property:或者,如果您没有导航属性:

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
   };

You will need to group your products and check if any match the code您需要对您的产品进行分组并检查是否与代码匹配

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