Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ选择新列表,将父类传递给属性类_C#_Linq - Fatal编程技术网

C# LINQ选择新列表,将父类传递给属性类

C# LINQ选择新列表,将父类传递给属性类,c#,linq,C#,Linq,我不确定我是否只是在搜索错误的东西,我只是找不到将父类传递给该类的属性的示例 我试图创建一个简单的示例,您可以在下面看到或在上查看 我只是想让Column类知道它自己的父表,通过构造函数(new Table())传递它的实例。请参阅代码示例中我希望执行此操作的注释:/*在此处传递父级*/ using System; using System.Collections.Generic; using System.Linq; public class FakeDb{ public cla

我不确定我是否只是在搜索错误的东西,我只是找不到将父类传递给该类的属性的示例

我试图创建一个简单的示例,您可以在下面看到或在上查看

我只是想让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();


    }
}
使用系统;
使用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
应该是我们在同一时间发布的预期参数,但是你以秒数领先。因此,如果你能给我的答案添加一些真实的解释,我很乐意删除我的答案,而代之以你的答案。请避免用一堆代码像“试试那个”一样回答