如何使用 linq 从两个 table 中 select 列
how to select columns from two table with where using linq
我有三个表:
service_group
{
id,
title
}
service
{
id,
title,
group_id
}
service_rate
{
id,
title,
service_id,
price,
date
}
我有一个 group_service
的组合框,用户必须 select 一个,然后打开一个表单,用户可以从 service_rate
列表中进行选择。
service_rate
列表包括 servic_rate
和 service_id
在 service.id
中 selected service_group_id
。
如果我英语说得不好,请原谅。
我的代码:
var list = (
from p in db.Tbl_Services
where p.Service_Group_ID == _service_group_id
select new {
p.ID,
p.Title,
p.Tbl_Services_Rate.Where(m = > m.Service_ID == p.ID).Last().Price,
p.Tbl_Services_Rate.Where(m = > m.Service_ID == p.ID).Last().date
}).ToList();
但似乎不起作用。
你可以这样做:
var list = db.Tbl_Services_Rate
.Where(x=>x.service.group_id == _service_group_id && x.service_id != null && x.service_id != "")
.GroupBy(x=>x.service_id)
.Select(x=>x.OrderByDescending(y=>y.id).FirstOrDefault())
.ToList();
空检查是因为您将删除那些可能包含 service_id 为空或空的记录,因为您将必须使用此 ID 进行检查。
var list = (from MM in service_rate join TL in service on MM.service_id equals TL.id
join Em in service_group on TL.group_id equals Em.id
where TL.group_id = 2 select new {
MM.id,
MM.title,
MM.service_id,
MM.price,
MM.date,
}).ToList();
你假设 select 来自 Tbl_Service 的所有 ID,然后存储在列表/数组中。然后在第二个查询中使用 Contains 来过滤 ID。试试下面的代码。
var tblService = (from x in Tbl_Services where x.Service_Group_ID == "2" select x.ID).ToList();
var Tbl_Services_Rate = from y in Tbl_Services where tblService.Contains(y.Service_ID) select y;
请尝试下面的 LINQ 查询,
from sr in service_rate
join s in service on sr.service_id equals s.id
join sg in service_group on s.group_id equals sg.id
where sg.id==2
select new
{sr.id,
sr.title,
sr.service_id,
sr.price,
sr.date}
我有三个表:
service_group
{
id,
title
}
service
{
id,
title,
group_id
}
service_rate
{
id,
title,
service_id,
price,
date
}
我有一个 group_service
的组合框,用户必须 select 一个,然后打开一个表单,用户可以从 service_rate
列表中进行选择。
service_rate
列表包括 servic_rate
和 service_id
在 service.id
中 selected service_group_id
。
如果我英语说得不好,请原谅。
我的代码:
var list = (
from p in db.Tbl_Services
where p.Service_Group_ID == _service_group_id
select new {
p.ID,
p.Title,
p.Tbl_Services_Rate.Where(m = > m.Service_ID == p.ID).Last().Price,
p.Tbl_Services_Rate.Where(m = > m.Service_ID == p.ID).Last().date
}).ToList();
但似乎不起作用。
你可以这样做:
var list = db.Tbl_Services_Rate
.Where(x=>x.service.group_id == _service_group_id && x.service_id != null && x.service_id != "")
.GroupBy(x=>x.service_id)
.Select(x=>x.OrderByDescending(y=>y.id).FirstOrDefault())
.ToList();
空检查是因为您将删除那些可能包含 service_id 为空或空的记录,因为您将必须使用此 ID 进行检查。
var list = (from MM in service_rate join TL in service on MM.service_id equals TL.id
join Em in service_group on TL.group_id equals Em.id
where TL.group_id = 2 select new {
MM.id,
MM.title,
MM.service_id,
MM.price,
MM.date,
}).ToList();
你假设 select 来自 Tbl_Service 的所有 ID,然后存储在列表/数组中。然后在第二个查询中使用 Contains 来过滤 ID。试试下面的代码。
var tblService = (from x in Tbl_Services where x.Service_Group_ID == "2" select x.ID).ToList();
var Tbl_Services_Rate = from y in Tbl_Services where tblService.Contains(y.Service_ID) select y;
请尝试下面的 LINQ 查询,
from sr in service_rate
join s in service on sr.service_id equals s.id
join sg in service_group on s.group_id equals sg.id
where sg.id==2
select new
{sr.id,
sr.title,
sr.service_id,
sr.price,
sr.date}