2012-01-15 92 views
0

我是LINQ的新手,有人可以指导我如何在Linq中转换以下SQL查询。第一个SQL到Linq转换

Select tblIns.InsID, tblProg.ProgName 
from tblIns, tblProg 
Where tblIns.InsID = tblProg.InsID 

我的MVC2项目的工作,我的datacontext和Reposetories,请找到下面的代码,我需要这个查询:

public IQueryable<tblInstitute> InsRepeater() 
{ 
    return from Inst in _db.tblInstitutes 
      from Progs in _db.tblPrograms 
      Where Inst.InstituteID = Progs.InstituteID 
      Select Inst.InstituteID, Progs.ProgramName 
} 

回答

3

你首先需要的是模拟数据上下文的数据库。以下是linq to sql如何做到这一点的一个例子。您也可以使用实体框架(EF)或任何其他提供者来完成此任务。

一旦你的表中创建,查询,然后转换非常直截了当:

var results = from insEntity in tablIns 
       from progEntity in tablProg 
       where insEntity.InsID equals progEntity.InsID 
       select new { insEntity.InsID, progEntity.ProgName }; 

随着你问这个问题,因为我认为将是有益的,这是一样多。将来最好写下问题,解释你正在尝试做什么,你尝试了什么,然后解释你被困住的地方。这个问题应该足够具体,让你刚好在下一个峰值。


根据您的编辑:您有需求的查询有小写whereselect,它需要终止与分号的声明(假设它是)。然后你选择语句需要选择一个新的对象。结果会是这个样子:

public IQueryable<tblInstitute> InsRepeater() 
{ 
    return from Inst in _db.tblInstitutes 
      from Progs in _db.tblPrograms 
      where Inst.InstituteID equals Progs.InstituteID 
      select Inst; // for the current method header 
      //select new { Inst.InstituteID, Progs.ProgramName }; // to use this one you'll have to create a new type with the properties you want to return 
} 
+0

此类型的评论应该是您的原始文章的编辑。我会为你做这件事 – 2012-01-15 14:35:08

+0

这实际上会起作用吗?你的方法声明不是'tblInstitute'类型集合的方法声明,但是你的'return'语句返回的是一个匿名对象,它是一个由研究所和程序组成的? – 2012-01-15 14:53:21

+0

现在只有1个错误不能隐式转换类型'int'到'布尔'\t在这一行(我已检查这两个字段是int类型的正确加入关系窗口) Inst.InstituteID = Progs.InstituteID – Jawad 2012-01-15 14:54:17

0

首先,你需要 1.创建实体类。 2.数据上下文。 3.定义关系 4.查询

Reference

from I in tblIns 
from P in tblProg 
Where I.InsID = P.InsID 
Select I.InsID, P.ProgName 
0

假设你有你的外键中你可以做这个数据库设置不当,没有必要向自己加入:

from x in db.tblProgs 
select x.tblIns.id, x.Progname