如何根据表“b”中的不同值从表“a”中检索数据

时间:2014-02-20 23:37:13

标签: c# sql .net linq

var c = from p in db.Testings
        where p.id == Convert.ToInt32(k)
        select new{p.ItemId};`

上面的Linq返回了包含不同ItemIds的多个行。 现在,我试图从Questions表中检索包含我在上面的linq中返回的所有ItemIds的所有行。正如所料,以下代码无效。任何人都可以帮我解决这个逻辑或纠正我的代码,如果这是一个小的逻辑错误。

 var cfk = from p in db.Questions
           where p.ItemId == Convert.ToInt32(c)
           select p;

 GridView4.DataSource = cfk;
 GridView4.DataBind();

3 个答案:

答案 0 :(得分:0)

类似的东西:

              var cfk = from p in db.Questions
              where c.Contains(p.ItemId)
              select p;

答案 1 :(得分:0)

您可以使用LINQ执行内部联接。

http://msdn.microsoft.com/en-us/library/bb397941.aspx

如果可能的话,我可能会在你的Get()期间在Db端进行连接。

答案 2 :(得分:0)

根据您选择的'cfk'作为第二个变量名称,我猜你已经设置了数据库,使得Questions.ItemId是Testings的外键,其中Testings.ItemId是Testings and Testings的主键。 id是其他一些非关键列。

如果是这种情况,你可以说:

var cfk = db.Testings
            .Where(t => t.id == k)
            .SelectMany(t => t.Questions);

var cfk = db.Questions
            .Where(t => t.Testing.id == k);

如果没有外键关系,则需要像其他人建议的那样进行加入。

var cfk = db.Testings
            .Where(t => t.id == k)
            .Join(db.Questions, t => t.ItemId, q => q.ItemId, (t, q) => q);