【问题标题】:ASP.NET LINQ Join won't workASP.NET LINQ 加入不起作用
【发布时间】:2012-08-24 03:43:22
【问题描述】:

我正在用 ASP 制作一个新的应用程序。我想要一个包含所有连接数据的输出。我在 3 层工作。

所以这里是加入代码

Public Function selectAllOpenBugs() As List(Of tbl_bug)
    Dim result = (From b In dc.tbl_bugs
                  Join p In dc.tbl_priorities On b.BugPriority Equals p.priorityId
                  Join u In dc.tbl_users On b.BugOwner Equals u.userId
                  Join u1 In dc.tbl_users On b.BugAssigned Equals u1.userId
                  Where b.BugStatus = 1
                  Select b).ToList
    Return result
End Function

这是获取结果的代码

    Public Function selectOpen() As List(Of tbl_bug)
         Return DALBugs.selectAllOpenBugs()
    End Function

这是填充中继器的代码

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    rptOpenBugs.DataSource = BBLBugs.selectOpen()
    rptOpenBugs.DataBind()
End Sub

这就是中继器显示的内容

BugId   BugTitle    BugPriority BugStatus   BugOwner    BugAssigned BugProject  BugPriority
1           TEST          1      1              1              2        1       tbl_priority

为什么中继器不显示连接的值?

提前致谢!

解决方案

你们显然没有理解我的问题。 我与我忘记在问题中提及的实体合作。

问题不在于选择正确的值。我只需要获取转发器中的值。像这样

<asp:Content ID="Content1" runat="server" contentplaceholderid="MainContent">
<table>
<asp:Repeater ID="rptOpenBugs" runat="server">
<ItemTemplate>
        <tr>
            <td><asp:Label ID="lblID" runat="server" Text='<%# Eval("BugId")%>'></asp:Label></td>
            <td><asp:Label ID="lblTitel" runat="server" Text='<%# Eval("BugTitle")%>'></asp:Label></td>
            <td><asp:Label ID="lblPrioriteit" runat="server" Text='<%# Eval("tbl_priority.priorityName")%>'></asp:Label> </td>
[....]

     </td>
            <td></td>
        </tr>
    </ItemTemplate>
</asp:Repeater>
</table>

【问题讨论】:

  • 我的错误,从您的回答中不清楚这是一个解决方案。如果是,请继续将其作为答案发布,但要明确说明是这种情况。

标签: asp.net .net sql linq


【解决方案1】:

嗯.. 因为你只选择 b?这是一个棘手的问题吗?

Linq 只选择您告诉它选择的内容,而您告诉它选择 b。如果您想要其他值,那么您也需要选择这些值。我不知道 VB 的语法是什么,但在 c# 中会是这样的:

var result = (from b In dc.tbl_bugs
              join p In dc.tbl_priorities on b.BugPriority equals p.priorityId
              join u In dc.tbl_users on b.BugOwner equals u.userId
              join u1 In dc.tbl_users on b.BugAssigned equals u1.userId
              where b.BugStatus == 1
              select new {Bugs = b, Prioritiy = p.Foo, user = u1.Bar }).ToList();

编辑:

根据您的回答,您正在艰难地处理事情。根据您的回答,您具有导航属性,并且这些属性具有隐式连接。你可以这样写你的查询:

var result = (from b in dc.tbl_bugs where BugStatus == 1).ToList()

访问导航属性提供了一个隐式表连接,您可以使用导航属性简单地访问 tbl_priority 或 BugAssigned 或其他任何内容。只有在没有导航属性时才需要使用连接语法。

【讨论】:

  • 感谢您的回答。我记得在我之前的程序中我做了同样的事情并且它在那里工作(也许我只是记错了)。无论如何,你能帮我看看怎么做吗?
  • 您好,感谢您的代码示例。但是还有一个问题。现在我不能再这样做了:“Public Function selectAllOpenBugs() As List(Of tbl_bug)”这就是 LINQ 的重点,不是吗?
  • @schoen - 不,您不能返回 tbl_bug,因为 tbl_bug 不包含您想要的数据,除非 tbl_bug 具有 tbl_priorities 表的导航属性。如果它具有导航属性,则不需要连接,因为连接是从导航中推断出来的。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多