Linq简单查询错误

时间:2015-04-30 13:02:07

标签: c# linq

我在LINQ中编写一个简单的查询。实际上这是我在Linq的第一个查询。编译器如何解释查询让我感到困惑。 我的查询未提供任何结果

我的Linq查询:

using (DataClasses1DataContext db = new DataClasses1DataContext(("connection string")))
{
    var notif_sched_data = from sched  in db.NOTIF_SCHEDs
                           join  recip in db.NOTIF_RECIPs
                           on sched.NOTIF_RECIP_ID equals recip.NOTIF_RECIP_ID
                           select sched.NOTIF_RPT_ID;
}

由编译器解释为

SELECT [t0].[NOTIF_RPT_ID]
FROM [dbo].[NOTIF_SCHED] AS [t0]
INNER JOIN [dbo].[NOTIF_RECIP] AS [t1] ON [t0].[NOTIF_RECIP_ID] = [t1].[NOTIF_RECIP_ID] 

并且它没有输出任何行。但是,正确工作的SQL是:

select [NOTIF_SCHED].[NOTIF_RPT_ID] 
from [NOTIF_SCHED] 
INNER JOIN [NOTIF_RECIP] on [NOTIF_RECIP].[NOTIF_RECIP_ID]=[NOTIF_SCHED].[NOTIF_RECIP_ID].

有人可以告诉我需要改变什么吗? 如果我更改等于的值,则会出现错误,因为值不在正确的范围内。

3 个答案:

答案 0 :(得分:2)

您无论如何都没有实现查询。查询将返回您在那里选择的IQueryable。要将查询实际执行到数据库,您需要使用.Count(),.FirstOrDefault(),.Tolist()等方法实现结果...

using (var db = new DataClasses1DataContext(("connection string")))
{
    var query = (from sched  in db.NOTIF_SCHEDs
               join  recip in db.NOTIF_RECIPs
               on sched.NOTIF_RECIP_ID equals recip.NOTIF_RECIP_ID
               select sched.NOTIF_RPT_ID);

    var count = query.Count();

    var list = query.ToList();
}

答案 1 :(得分:0)

感谢您的时间。实际上查询是正确的。问题出在我们在OOPS对象中转换sql对象的类文件中。

答案 2 :(得分:-2)

我认为问题出在最后一行。你应该创建一个新的匿名类型。所以将最后一行更改为可以解决问题:

select new { sched.NOTIF_RPT_ID };

你也可以创建一个像这样的类,并将你的值设置为类的对象

public class data
{
 public int id {get;set}
 public somthing somthing {get;set}
...
}

现在简单地说:

select new { id = sched.NOTIF_RPT_ID , something = x , ... };