c# - 带有连接的 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
});
解决方案
您有许多供应商产品,因此您必须应用适当的谓词并且不需要连接。
通过导航属性:
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
};
推荐阅读
- database - Sqlite - 根据行中的另一个数据更新表行
- reactjs - algolia 全文搜索,firebase
- java - @ControllerAdvice 注解的类没有捕捉到服务层抛出的异常
- java - 通过在 SpringBoot 中调用 REST 端点来启动 IntegrationTest
- asynchronous - rust tokio:从同步闭包中调用异步函数
- python - 打开安装 python 文件?
- c - 修改文件中的现有行并修剪该行的其余部分
- github - 如何使用 curl 和 GraphQL updateIssueComment 突变在 Github 中更新问题或 PR 评论
- purescript - 将多态记录传递给外部函数
- github - 在 github 上托管 Hugo