LINQ 加入分组依据
LINQ Join with Group By
我有一个 table 结构,如下所示
Table_A
Id Description
1 A
2 B
3 C
4 D
Table_B
Table_A_Id Id Description
1 1 A
1 2 B
2 3 C
2 4 D
3 5 E
3 6 F
4 7 G
4 8 H
4 9 I
4 10 J
我想以某种方式加入他们以获得以下列表Class
Public Resultset
{
public Table_A table_a {get;set;}
public List<Table_B> table_b {get;set;}
}
// 假设我们有 类 用于 Table_A 和 Table_B 根据他们的 table 定义
以下是我的尝试
var filter [] = {1,3,5};
var query = from a in context.Table_A
joins b in context.Table_B
on a.Id equals b.Table_A_id
where filter.Contains(b.Id)
// Need something here perhaps to group it to get desired results
Select new ResultSet()
{
// what to do here
}
您可以尝试以下群组:
var query = from a in context.Table_A
joins b in context.Table_B
on a.Id equals b.Table_A_id
where filter.Contains(b.Id)
group new{A=a, B=b } by a.Id into g
select new ResultSet()
{
table_a=g.FirstOrDefault().A,
table_b=g.Select(e=>e.B).ToList()
};
另一种方式,如果您在这些实体之间使用 navigation properties:
var query = from b in context.Table_B
where filter.Contains(b.Id)
group b by b.Table_A_id into g
select new ResultSet()
{
table_a=g.FirstOrDefault().A,
table_b=g.ToList()
};
我认为你需要一个简单的 Group Join:
var filter = new [] { 1, 3, 5 };
var query = from a in context.Table_A
join b in (from b in context.Table_B where filter.Contains(b.Id) select b)
on a.Id equals b.Table_A_id into items_B
select new ResultSet
{
table_a = a,
table_b = items_B.ToList()
};
我有一个 table 结构,如下所示
Table_A
Id Description
1 A
2 B
3 C
4 D
Table_B
Table_A_Id Id Description
1 1 A
1 2 B
2 3 C
2 4 D
3 5 E
3 6 F
4 7 G
4 8 H
4 9 I
4 10 J
我想以某种方式加入他们以获得以下列表Class
Public Resultset
{
public Table_A table_a {get;set;}
public List<Table_B> table_b {get;set;}
}
// 假设我们有 类 用于 Table_A 和 Table_B 根据他们的 table 定义
以下是我的尝试
var filter [] = {1,3,5};
var query = from a in context.Table_A
joins b in context.Table_B
on a.Id equals b.Table_A_id
where filter.Contains(b.Id)
// Need something here perhaps to group it to get desired results
Select new ResultSet()
{
// what to do here
}
您可以尝试以下群组:
var query = from a in context.Table_A
joins b in context.Table_B
on a.Id equals b.Table_A_id
where filter.Contains(b.Id)
group new{A=a, B=b } by a.Id into g
select new ResultSet()
{
table_a=g.FirstOrDefault().A,
table_b=g.Select(e=>e.B).ToList()
};
另一种方式,如果您在这些实体之间使用 navigation properties:
var query = from b in context.Table_B
where filter.Contains(b.Id)
group b by b.Table_A_id into g
select new ResultSet()
{
table_a=g.FirstOrDefault().A,
table_b=g.ToList()
};
我认为你需要一个简单的 Group Join:
var filter = new [] { 1, 3, 5 };
var query = from a in context.Table_A
join b in (from b in context.Table_B where filter.Contains(b.Id) select b)
on a.Id equals b.Table_A_id into items_B
select new ResultSet
{
table_a = a,
table_b = items_B.ToList()
};