【问题标题】:How to convert sql inner join query into linq to sql query and convert into list如何将 sql 内连接查询转换为 linq to sql 查询并转换为列表
【发布时间】:2016-05-27 03:42:20
【问题描述】:

我有以下课程:

public class customRequest
{
    public string REQ_STATUS { get; set; }
    public DateTime REQ_RVE_DATnTIM { get; set; }
    public string EMP_FNAME { get; set; }
    public string EVE_CAT_NAME { get; set; }
    public string EVE_NAME { get; set; }
}

及以下在 SQL 中完美运行的 SQL 内连接查询:

SELECT req.REQ_STATUS,req.REQ_RVE_DATnTIM, emp.EMP_FNAME, cat.EVE_CAT_NAME,eve.EVE_NAME from REQUESTS req inner join Employees emp on req.REQ_EMP_ID = emp.ID inner join EVENTCATEGORIES cat on req.REQ_EVE_CAT_ID = cat.ID inner join EVENTS eve on req.REQ_EVE_NAM_ID = eve.ID order by req.REQ_STATUS

我想要的是把它转换成我的 linq to sql 查询。下面是我尝试过的 Linq to Sql 查询:

slist = from req in db.REQUESTS
                    join emp in db.Employees on req.REQ_EMP_ID equals emp.ID
                    join cat in db.EVENTCATEGORIES on req.REQ_EVE_CAT_ID equals cat.ID
                    join eve in db.EVENTS on req.REQ_EVE_NAM_ID equals eve.ID
                    select new { req.REQ_STATUS, req.REQ_RVE_DATnTIM, emp.EMP_FNAME, cat.EVE_CAT_NAME, eve.EVE_NAME };
        return slist.ToList();

但它在上次加入时显示错误:

错误 1 ​​无法将类型“System.Linq.IQueryable”隐式转换为“System.Collections.Generic.List”。存在显式转换(您是否缺少演员表?) H:\64bit\Project Finalizing\Blue_Pumpkin\Blue_Pumpkin\Admin\Requests.aspx.cs 32 25 Blue_Pumpkin

【问题讨论】:

  • 尝试返回slist.ToList()
  • 是的,我试过了,但最后一次加入时显示同样的错误。
  • 你能把整个函数贴出来吗?

标签: c# asp.net sql-server linq join


【解决方案1】:

我假设您希望从查询中返回 customRequest 类。您需要将您的选择语句显式转换为customRequest..

slist = (from req in db.REQUESTS
                    join emp in db.Employees on req.REQ_EMP_ID equals emp.ID
                    join cat in db.EVENTCATEGORIES on req.REQ_EVE_CAT_ID equals cat.ID
                    join eve in db.EVENTS on req.REQ_EVE_NAM_ID equals eve.ID
                    select new customRequest {
                       REQ_STATUS = req.REQ_STATUS, req.REQ_RVE_DATnTIM, 
                       EMP_FNAME = emp.EMP_FNAME, 
                       EVE_CAT_NAME = cat.EVE_CAT_NAME, 
                       EVE_NAME = eve.EVE_NAME }).ToList();
            return slist;

如果碰巧你确实需要返回一个列表。你需要将你的返回类型声明为一个列表变量并从那里使用ToList(),如果你要返回一个单行结果集,那么你可以使用First()FirstOrDefault()

【讨论】:

  • 感谢您的努力@matchesMalone。我只是对你的代码做一些小改动,然后得到我想要的。下面是我编辑的代码
  • select new customRequest { REQ_STATUS = req.REQ_STATUS, REQ_RVE_DATnTIM = (DateTime)req.REQ_RVE_DATnTIM, EMP_FNAME = emp.EMP_FNAME, EVE_CAT_NAME = cat.EVE_CAT_NAME, EVE_NAME = eve.EVE_NAME }).ToList();
【解决方案2】:

您可以将 ToList() 与您的 linq 查询一起使用:

var slist = (from req in db.REQUESTS
                join emp in db.Employees on req.REQ_EMP_ID equals emp.ID
                join cat in db.EVENTCATEGORIES on req.REQ_EVE_CAT_ID equals cat.ID
                join eve in db.EVENTS on req.REQ_EVE_NAM_ID equals eve.ID
                select new select new customRequest {
                   REQ_STATUS = req.REQ_STATUS,
                   REQ_RVE_DATnTIM= req.REQ_RVE_DATnTIM, 
                   EMP_FNAME = emp.EMP_FNAME, 
                   EVE_CAT_NAME = cat.EVE_CAT_NAME, 
                   EVE_NAME = eve.EVE_NAME }){
                   REQ_STATUS = req.REQ_STATUS, req.REQ_RVE_DATnTIM, 
                   EMP_FNAME = emp.EMP_FNAME, 
                   EVE_CAT_NAME = cat.EVE_CAT_NAME, 
                   EVE_NAME = eve.EVE_NAME }).ToList();

【讨论】:

  • 它显示了一个错误Error 1 Cannot initialize type 'Error 1 Cannot initialize type 'Blue_Pumpkin.Admin.customRequest' with a collection initializer because it does not implement 'System.Collections.IEnumerable' F:\64bit\Project Finalizing\Blue_Pumpkin\Blue_Pumpkin\Admin\Requests.aspx.cs 33 50 Blue_Pumpkin
  • 你是如何删除'slist'变量的,它是你类的对象吗?
  • 我的方法var slist = new List<customRequest >();
  • 看我的回答@AhmerAliAhsan
  • 感谢@Sahi 的努力,但我在 MatchesMalone 帖子中找到了解决方案。
猜你喜欢
  • 2017-10-06
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多