C# LINQ选择新列表,将父类传递给属性类
我不确定我是否只是在搜索错误的东西,我只是找不到将父类传递给该类的属性的示例 我试图创建一个简单的示例,您可以在下面看到或在上查看 我只是想让Column类知道它自己的父表,通过构造函数(new Table())传递它的实例。请参阅代码示例中我希望执行此操作的注释:/*在此处传递父级*/C# LINQ选择新列表,将父类传递给属性类,c#,linq,C#,Linq,我不确定我是否只是在搜索错误的东西,我只是找不到将父类传递给该类的属性的示例 我试图创建一个简单的示例,您可以在下面看到或在上查看 我只是想让Column类知道它自己的父表,通过构造函数(new Table())传递它的实例。请参阅代码示例中我希望执行此操作的注释:/*在此处传递父级*/ using System; using System.Collections.Generic; using System.Linq; public class FakeDb{ public cla
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();
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
公共类伪造数据库{
公共类伪造栏目{
公共字符串列名称;
}
公共类FakeTable{
公共字符串表名{get;set;}
公共IEnumerable列{get;set;}
}
公共IEnumerable表{get;set;}
公众伪造数据库(){
Tables=新列表(){
新FakeTable(){
TableName=“People”,
列=新列表(){
新伪列(){
ColumnName=“FirstName”
},
新伪列(){
ColumnName=“LastName”
}
}
}
};
}
}
公共类表{
公共Guid TableGuid=Guid.NewGuid();
公共IEnumerable列;
}
公共类专栏{
私有表_myTable;
公共Guid ColumneGuid=Guid.NewGuid();
公共列(表hostTable){
_myTable=hostTable;
}
}
公共课程
{
公共静态void Main()
{
var fakeDb=新的fakeDb();
var tableList=fakeDb.Tables.GroupBy(p=>p.TableName,p=>p,(TableName,values)=>new{
TableName=TableName,
其他值=值
}).Select(p=>newtable(){
Columns=p.OtherValues.Select(i=>newcolumn(/*在此处传递父项?*/).ToList()
}).ToList();
}
}
因为您没有对正在创建的新表
对象的引用,所以无法在单行查询中执行此操作。但是,将其更改为多行lambda表达式将使这成为可能。将新创建的表保存在变量中,然后将该变量传递到列的构造函数中
你必须这样做
.Select(p =>
{
var t = new Table();
t.Columns = p.OtherValues.Select(i => new Column(t)).ToList();
return t;
});
演示:此
将引用程序
类。但是p
应该是我们在同一时间发布的预期参数,但是你以秒数领先。因此,如果你能给我的答案添加一些真实的解释,我很乐意删除我的答案,而代之以你的答案。请避免用一堆代码像“试试那个”一样回答