【问题标题】:How to retrieve data from table "a" based on different values in table "b"如何根据表“b”中的不同值从表“a”中检索数据
【发布时间】:2014-02-20 23:37:12
【问题描述】:
var c = from p in db.Testings
        where p.id == Convert.ToInt32(k)
        select new{p.ItemId};`

上面的 Linq 返回包含不同 ItemId 的多行。 现在,我正在尝试从包含我在上述 linq 中返回的所有 ItemIds 的 Questions 表中检索所有行。正如预期的那样,下面的代码不起作用。如果这是一个小的逻辑错误,任何人都可以帮我解决这个逻辑或纠正我的代码。

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

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

【问题讨论】:

标签: c# sql .net linq


【解决方案1】:

类似:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      如果是这样,你可以说:

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

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

      如果没有外键关系,您需要按照其他人的建议进行 Join,例如

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

      【讨论】:

        猜你喜欢
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        • 2013-11-10
        • 2015-08-04
        • 2015-05-12
        • 2016-03-17
        • 1970-01-01
        • 2017-05-07
        相关资源
        最近更新 更多