我正在ASP中创建一个新的应用程序。我想要一个包含所有连接数据的输出。我分三层工作。
所以这是加入代码
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>
答案 0 :(得分:4)
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或其他任何内容。只有在没有导航属性时才需要使用连接语法。