Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# 在ASP.NET C中,我可以从db中使用动态字段实现动态对象吗#_C#_Asp.net_Linq_Asp.net Core - Fatal编程技术网

C# 在ASP.NET C中,我可以从db中使用动态字段实现动态对象吗#

C# 在ASP.NET C中,我可以从db中使用动态字段实现动态对象吗#,c#,asp.net,linq,asp.net-core,C#,Asp.net,Linq,Asp.net Core,我知道GraphQL是一个解决方案,但我想知道是否还有其他方法,因为我希望这个功能只是用来取代DB调用,我只是指定需要哪个对象及其字段,然后我就得到了这些数据。我不想要GraphQLAPI 例如:我有表A、B和C,如果我有表B和C主键作为表A中的外键 假设我是Id为1的查询表A数据,然后我还可以在同一查询中包含与表A Id为1链接的表c的数据,并使用include(x=>x.tableC)。例如:- db.Where<TableA>(x => x.id.equals(id)).

我知道GraphQL是一个解决方案,但我想知道是否还有其他方法,因为我希望这个功能只是用来取代DB调用,我只是指定需要哪个对象及其字段,然后我就得到了这些数据。我不想要GraphQLAPI

例如:我有表A、B和C,如果我有表B和C主键作为表A中的外键

假设我是Id为1的查询表A数据,然后我还可以在同一查询中包含与表A Id为1链接的表c的数据,并使用
include(x=>x.tableC)
。例如:-

db.Where<TableA>(x => x.id.equals(id)).include(x => x.tablec);
db.Where(x=>x.id.equals(id))。包括(x=>x.tablec);
现在我的要求是,要包含的数据可以是动态的,它可以是
TableB(FieldA,FieldB)
,也可以是
TableC(FieldA),TableB(FieldA,FieldB)
,也可以是
TableC(FieldD)

根据这一点,我想要结果


就我从你的问题中所理解的,这个东西将包含在一个变量中;假设您将关系存储在变量中,以便可以链接
include

大概是这样的:

//Lets say TableA has relation with tableB and tableC
List<string> tableARelations = new List<string>()
{
    "tableB",
    "tableC"
}


using (var dbContext = GetDbContext())
{
    var query = dbContext.TableA.AsQueryable();
    foreach (string include in tableARelations)
    {
        query = query.Include(include);
    }

    var result =  query.Where(x => x.Id.Equals(id)).FirstOrDefault();                    
}
//假设TableA与tableB和tableC有关系
列表表关系=新列表()
{
“表B”,
“表C”
}
使用(var dbContext=GetDbContext())
{
var query=dbContext.TableA.AsQueryable();
foreach(表关系中包含的字符串)
{
query=query.Include(包含);
}
var result=query.Where(x=>x.Id.Equals(Id)).FirstOrDefault();
}

我们需要更多的细节。你能给出一个你想要替换的查询的例子,以及你想要做什么样的更改吗?您是在问如何动态构建SELECT语句以仅选择某些字段还是其他内容?“你的帖子目前只是有点模糊。”阿德森编辑,希望它能帮助你理解,谢谢。那么,代码如何知道每次要包含哪些表呢?你会设置一个变量来控制它吗?如果是,那么您可以使用
If
语句来决定是否将每个include()语句链接到查询。