LINQ选择新列表,将父类传递给属性类
本文关键字:父类 属性 新列表 选择 列表 LINQ | 更新日期: 2023-09-27 18:13:39
我不确定我是否只是在搜索错误的东西,我只是找不到将父类传递到该类属性的示例。
我试图创建一个简单的例子,你可以在下面看到或在https://dotnetfiddle.net/uBGWgp上查看它。
我只是想让Column类知道它自己的父表,通过构造函数(new Table())传递它的实例。请参阅代码示例中的注释,我希望这样做:/*在这里传递父级?*/
using System;
using System.Collections.Generic;
using System.Linq;
public class FakeDb{
public class FakeColumn{
public string ColumnName;
}
public class FakeTable{
public string TableName {get;set;}
public IEnumerable<FakeColumn> Columns {get;set;}
}
public IEnumerable<FakeTable> Tables {get;set;}
public FakeDb(){
Tables = new List<FakeTable>(){
new FakeTable(){
TableName = "People",
Columns = new List<FakeColumn>(){
new FakeColumn(){
ColumnName = "FirstName"
},
new FakeColumn(){
ColumnName = "LastName"
}
}
}
};
}
}
public class Table{
public Guid TableGuid = Guid.NewGuid();
public IEnumerable<Column> Columns;
}
public class Column{
private Table _myTable;
public Guid ColumneGuid = Guid.NewGuid();
public Column(Table hostTable){
_myTable = hostTable;
}
}
public class Program
{
public static void Main()
{
var fakeDb = new FakeDb();
var tableList = fakeDb.Tables.GroupBy(p => p.TableName, p => p, (tableName, values) => new {
TableName = tableName,
OtherValues = values
}).Select(p => new Table(){
Columns = p.OtherValues.Select(i => new Column(/* Pass parent here? */)).ToList()
}).ToList();
}
}
因为您没有保存对正在创建的新Table
对象的引用,因此无法在单行查询中执行此操作。然而,将其更改为多行lambda表达式将使这成为可能。将新创建的表保存在一个变量中,然后将该变量传递给Column
的构造函数。
你必须这样做
.Select(p =>
{
var t = new Table();
t.Columns = p.OtherValues.Select(i => new Column(t)).ToList();
return t;
});
演示:https://dotnetfiddle.net/1kKxMR