gpt4 book ai didi

c# - 在 linq 的外部连接中使用过滤器

转载 作者:行者123 更新时间:2023-11-30 15:22:16 25 4
gpt4 key购买 nike

我有以下实体:

public class Company
{
public string CompanyName { get; set; }
public int ID { get; set; }
}

public class CompanyCurrency
{
public int Id { get; set; }
public int CompanyId { get; set; }
public decimal Rate { get; set; }
public int CurrencyId { get; set; }
}

public class Currency
{
public int ID { get; set; }
public string Name { get; set; }
}

我需要获取某个国家/地区的货币列表。如果某个国家/地区没有货币条目,我也需要为该缺失条目添加一行。

我现在的声明是:

var  currencies  = 
from c in Currencies
join cc in CompanyCurrency
on c.ID equals cc.CurrencyId
into jointable
from resultiten in jointable.DefaultIfEmpty()


select new {c.Name ,
HasEntry = resultiten == null ? 0:1,
rate = resultiten != null ? resultiten.Rate:0 ,
} ;

这不是由 countryID 过滤的。我试图通过

添加过滤器
from c in Currencies
join cc in CompanyCurrency
on c.ID equals cc.CurrencyId
into jointable
from resultiten in jointable.DefaultIfEmpty()
where resultiten.CompanyId == 1 || resultiten == null


select new {c.Name ,
HasEntry = resultiten == null ? 0:1,
rate = resultiten != null ? resultiten.Rate:0

但是对于公司 ID 为 1 以外的公司的货币,这没有结果。

相应的 SQL 查询将是

select  * 
from [dbo].[Currency] c
left outer join [dbo].[CompanyCurrency] cc
on c.id = cc.Currencyid
and cc.[Companyid] = 1

最佳答案

您需要在 加入 之前应用过滤器:

join cc in CompanyCurrency.Where(e => e.CompanyId == 1)

或作为连接的一部分

on new { CurrencyId = c.ID, CompanyId = 1 } equals new { cc.CurrencyId, cc.CompanyId }

对于 inner join 这并不重要,但对于 outer join 这很重要(同样的 btw 适用于 SQL 查询)。

关于c# - 在 linq 的外部连接中使用过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35950454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com