我在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].
有人可以告诉我需要改变什么吗? 如果我更改等于的值,则会出现错误,因为值不在正确的范围内。
答案 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 , ... };