gpt4 book ai didi

c# - LINQ 选择具有名称的新类

转载 作者:数据小太阳 更新时间:2023-10-29 01:51:59 24 4
gpt4 key购买 nike

我有一个 linq 查询,我在其中创建了几个具有 Parent 属性的类。我正在寻找一种方法来将父属性设置为我刚刚创建的类。我的解释很糟糕;这是我正在尝试做的代码。

var query = from states in xml.Elements()
select new State
{
Children = from cities in states.Elements()
select new City()
{
ParentState = **???**;
}
};

如何设置 ParentState 属性?如果我能做类似的事情

select new State as newState
{
...
}

那会很酷,但我不能。我知道我可以使用 foreach 循环执行此操作,但我想了解如何(如果可能)使用 LINQ 执行此操作。帮助:(

编辑:我试过了let x = new State{ } 但这并没有多大帮助。我希望我可以像这样在构造函数中引用 x 但它没有成功:

let x = new State 
{
Children = from cities in states.Elements()
select new City{ ParentState = x }
}
select x;

在 F# 中,有类似的东西,你可以简单地说 let rec x = ...然后你可以在赋值语句中引用变量。但这是 C# 而不是 F# 所以无论如何。

最佳答案

有趣的问题,当然可能有一种方法可以通过在查询语句中正确设置属性来实现,但我认为另一种可能性是将部分逻辑移至 State 中的构造函数。考虑以下代码示例

class State
{
public int Id { get; set; }
public List<City> Children { get; set; }

public State(int id, IEnumerable<City> childrenCities)
{
this.Id = id;
this.Children = childrenCities.ToList();
foreach (City city in this.Children)
city.ParentState = this;
}
}

这个 State 类有一个构造函数,它接受一个可枚举的 City 对象。然后它遍历对象并设置 ParentState 属性。

然后不用查询表达式设置属性,而是调用构造函数。

// not LINQ-to-XML, just an example
var states = from i in Enumerable.Range(0, 10)
select new State(
i,
from j in Enumerable.Range(0, 5)
select new City
{
Id = j
}
);

关于c# - LINQ 选择具有名称的新类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3331022/

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