C# 创建查询交叉连接多对多表
共有两个表格: A-[Id],[标题] B-[Id],[Caption],[AId]-其中[AId]-表A的键(一对多) 假设表中有以下数据: А: b: 假设我们想要提取数据格式和内容,并将参数作为输出结果传递给两个实体的函数列表,应该如下所示: 一些交叉数据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
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();
}