Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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# 创建查询交叉连接多对多表_C#_Cross Join - Fatal编程技术网

C# 创建查询交叉连接多对多表

C# 创建查询交叉连接多对多表,c#,cross-join,C#,Cross Join,共有两个表格: A-[Id],[标题] B-[Id],[Caption],[AId]-其中[AId]-表A的键(一对多) 假设表中有以下数据: А: b: 假设我们想要提取数据格式和内容,并将参数作为输出结果传递给两个实体的函数列表,应该如下所示: 一些交叉数据 A5 | Mud A5 | Paper A4 | Mud A4 | Paper A3 | Mud A3 | Paper A5 | Mud | Single A5 | Mud | Double A5 | Pap

共有两个表格: A-[Id],[标题] B-[Id],[Caption],[AId]-其中[AId]-表A的键(一对多) 假设表中有以下数据:

А:

b:

假设我们想要提取数据格式和内容,并将参数作为输出结果传递给两个实体的函数列表,应该如下所示:

一些交叉数据

A5 | Mud 
A5 | Paper 
A4 | Mud 
A4 | Paper 
A3 | Mud 
A3 | Paper  
A5 | Mud   | Single 
A5 | Mud   | Double 
A5 | Paper | Single 
A5 | Paper | Double 
当我们想要提取这样的数据格式、材料和模式时,它变得更加困难。作为输出的结果传递到三个实体的函数参数列表,如下所示:

一些交叉数据

A5 | Mud 
A5 | Paper 
A4 | Mud 
A4 | Paper 
A3 | Mud 
A3 | Paper  
A5 | Mud   | Single 
A5 | Mud   | Double 
A5 | Paper | Single 
A5 | Paper | Double 
等等。表A课程不限于我的3次录音。差不多吧。结果样本除了列[Some Cross Data]类型字符串外,还应包含一列(比如[dict]类型列表),其中将包含一个列表和2个实体B(参见示例1)以及3个实体(参见示例2)等

私有静态列表ProcessData(IReadOnlyList)
{ 
var z3=列表[0]。属性值
.SelectMany(x=>list[1]。属性值,(a,b)=>new{a,b})
.SelectMany(x=>list[2]。属性值,(z,c)=>new{z.a,z.b,c})
.SelectMany(x=>list[3]。属性值,(y,d)=>new{y.a,y.b,y.c,d});
返回z3。选择(项=>新数据
{ 
Name=$“{item.a.Name}{item.b.Name}{item.c.Name}\t{item.d.Name}”,
PropertyValues=新列表
{
项目a、项目b、项目c、项目d
}
}).ToList();
}
代码执行它的任务,但一旦确定它仅在list.Count==4时适用。。。我们当然可以创建很多函数并调用它们,这取决于列表中的条目数——但这只是超级峰值


帮助创建查询…

它必须是EF Linq表达式还是可以使用SQL语句?这无关紧要
private static List<Data> ProcessData(IReadOnlyList<Property> list)
{ 
    var z3 = list[0].PropertyValues
        .SelectMany(x => list[1].PropertyValues, (a, b) => new { a, b })
        .SelectMany(x => list[2].PropertyValues, (z, c) => new { z.a, z.b, c })
        .SelectMany(x => list[3].PropertyValues, (y, d) => new { y.a, y.b, y.c, d });

    return z3.Select(item => new Data 
    { 
        Name = $"{item.a.Name} {item.b.Name} { item.c.Name}\t{item.d.Name}", 
        PropertyValues = new List<PropertyValue>
        {
            item.a, item.b, item.c, item.d
        }
    }).ToList();
}