【问题标题】:Using LINQ to get information from two tables, with a join使用 LINQ 通过连接从两个表中获取信息
【发布时间】:2015-11-27 19:32:20
【问题描述】:

我有一个 linq 语句来填充两个标签。问题是,这些信息来自两个表。我有一个加入这两个表的连接,但我无法从我的 Campaign 表中获取我的条款和条件。它只拾取 RedemptionLog 表列。有人帮忙吗?

MSCDatabaseDataContext MSCDB = new MSCDatabaseDataContext();
            var q = from row in MSCDB.Tbl_RedemptionLogs 
                    join d in MSCDB.Tbl_Campaigns on row.CampaignId equals d.CampaignId
                    orderby row.VoucherCode descending
                    select row;

            var SeshVoucherDisplay = q.First();

            lblCode.Text = SeshVoucherDisplay.VoucherCode;
            lblTerms.Text = SeshVoucherDisplay

对于 SeshVoucherDisplay 变量,它仅从 RedemptionLogs 表中获取,但我进行了联接?有什么帮助吗?

【问题讨论】:

  • 是否要在 SeshVoucherDisplay 中同时显示数据?

标签: c# linq join


【解决方案1】:

试试这样的:

var SupJoin = from row in MSCDB.Tbl_RedemptionLogs
              join d in MSCDB.Tbl_Campaigns on row.CampaignId equals d.CampaignId
              orderby row.VoucherCode descending
              select new { Id = row.ID, SupplierName = row.SupplierName, 
               CustomerName = d.CompanyName };

列名仅用于示例目的。把你自己的放在那里。之后,您可以在其上应用 First 并使用该特定变量。

希望这会有所帮助。

【讨论】:

  • 嘿,我今年才开始开发。这是我的第一个项目。你能帮我找出与我的表相关的列名吗?我尝试过混合和匹配,但出现错误。很抱歉打扰您。
  • 很好。更新您的问题并在 LINQ 查询中显示您想要的必要表和列。
  • 嘿,谢谢,我想通了。它只是没有提取正确的信息,但我肯定会弄明白。感谢您的帮助,让我更近了一步。
  • 很高兴它帮助了兄弟。
【解决方案2】:

好吧,通过写select row,您要求 LINQ 只回馈您row

如果你想要这两个元素,你需要同时请求它们,例如通过写select new { row, d }

在这个例子中

var foo =
    new []
    {
        new { Id = 1, Name = "a" },
        new { Id = 2, Name = "b" },
        new { Id = 3, Name = "c" }
    };

var bar =
    new []
    {
        new { Id = 1, Name = "d" },
        new { Id = 2, Name = "e" },
        new { Id = 3, Name = "f" }
    };

var baz =
    from a in foo
    join b in bar on a.Id equals b.Id
    select new { a, b };

var qux =
    from a in foo
    join b in bar on a.Id equals b.Id
    select new { a, b };

baz 中,您只会找到foos 的列表,在qux 中,您会找到foos 及其bar 的列表。

【讨论】:

  • 非常感谢老兄。但我还有一个问题哈哈,谢谢你到目前为止的帮助。但是我将如何获得数据库中的最后一个条目?从我的 RedemptionLogs 表中。我会假设,声明 var SeshVoucher = q.First();在 Voucher Code 上声明 OrderBy Descending 之后,因为这是最后一个条目,不是吗?可能是我的条款和条件与兑换日志表不匹配。我不确定,你认为你能帮忙吗?
  • 如果MSCDB.Tbl_Campaigns 包含多个给定MSCDB.Tbl_RedemptionLogs 条目的条目(这是可能的,您写的是one-to-many join,您也需要对MSCDB.Tbl_Campaigns 进行排序。
  • 谢谢,我明白了。由于您看不到我的信息,因此很难确定您的解决方案。我所要做的就是按 Redemption id 降序排序,因为那是主键。 (我的优惠券代码是散列的,所以它是按从大到小的顺序排列的,而不是在输入它们的时候。)但是非常感谢伙计,你帮我解决了这个问题。我完成了我的第一个项目 :D :D :D 谢谢! @Albireo
【解决方案3】:

试试这个:

var query = (from row in MSCDB.Tbl_RedemptionLogs
                                 join d in MSCDB.Tbl_Campaigns on row.CampaignId equals d.CampaignId)
                                 orderby row.VoucherCode descending
                                 select new
                                 {
                                    columnname = row.columnname
                                 });

【讨论】:

  • 谢谢老兄,你来晚了。我知道了。不过还是谢谢。
【解决方案4】:

在编写select row 时,您与在from row in MSCDB.Tbl_RedemptionLogs 中定义的行相关。

但是,如果您想要两个表中的数据,则必须编写类似于以下内容的内容:

select new { 
    // the properties of row
    Redemption = row.redemption, 
    // the properties of d
    Campaign = d.CampaignID // alternativly use may also use row.CampaignID, but I wanted to show you may acces all the members from d also 
}

【讨论】:

  • 什么是prop1,什么是Prop2?
  • 来自rowd 的一些虚拟属性,因为我不知道这些对象提供了哪些属性。
猜你喜欢
  • 2018-08-17
  • 1970-01-01
  • 2019-07-17
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多