首页 > 解决方案 > 带有连接的 Linq 需要按 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
                               });

标签: c#linqmodel-view-controller

解决方案


您有许多供应商产品,因此您必须应用适当的谓词并且不需要连接。

通过导航属性:

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

推荐阅读