如何使用 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_rateservice_idservice.idselected 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}