c# - LINQ 沿着对象树查询需要匹配的值

标签 c# linq

您好,提前感谢您提供的任何帮助。

我有一个 PostalCode 对象,它有一个与其关联的城市列表,城市有一个州对象作为属性,州对象有一个国家/地区对象作为属性。

我需要对将返回城市的邮政编码列表运行 linq 查询,但我需要它位于国家/地区代码等于“US”的位置。

在 SQL 中,这将是关系上的一堆内部联接:

SELECT *
FROM PostalCodes pc
INNER JOIN CityPostalCode cpc
ON cpc.PostalCodeId = pc.Id
INNER JOIN Cities c 
ON cpc.CityId = c.Id
INNER JOIN States s
ON s.Id = c.StateId
INNER JOIN Country c
ON s.CountryId = c.Id
WHERE pc.Code = '12345' AND c.Code = 'US'

如何在 LINQ 中对我的对象执行此操作?

public class PostalCode
{

    public int Id { get; set; }
    public string Code { get; set; }

    public virtual List<City> Cities { get; set; } 
}

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int StateId { get; set; }
    public virtual State State { get; set; }
    public virtual List<PostalCode> PostalCodes { get; set; }
}
public class State
{
    public int Id {get; set;}
    public string Code {get; set;}
    public string Name {get; set;}
    public int CountryId {get; set;}
    public Country Country {get; set;}
}
public class Country
{

    public int Id { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }
    public virtual List<State> States { get; set; }
}

最佳答案

如果您想返回包含该邮政编码的城市列表,那么您可以执行以下操作:

var cities = context.Cities
    .Where(city => city.State.Country.Code == "US" &&
                   city.PostalCodes.Any(pc => pc.Code == "12345"))
    .ToList();

关于c# - LINQ 沿着对象树查询需要匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36359773/

相关文章:

c# - 将对象格式化为主题和正文的通用方法?

C# 'as' 关键字和派生类

c# - 使用 Layout = null 时丢失所有格式?

sql - 创建没有外键的 LINQ 关联

c# - 如何访问 LINQ 查询中的关联?

c# - 哪个 winForm 控件用于此目的?

c# - 从 XML 网络流中读取整个元素

c# - 我需要帮助加快此 EF LINQ 查询

c# - 在 LINQ 中表达 Oracle LISTAGG() 功能?

linq - 如何辨别 Type 是否是静态数组初始值设定项?