ASP.NET LINQ Join将不起作用
我正在用ASP制作一个新的应用程序。我想要一个包含所有关联数据的输出。我分三层工作 下面是连接代码ASP.NET LINQ Join将不起作用,asp.net,.net,sql,linq,Asp.net,.net,Sql,Linq,我正在用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 Joi
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>
嗯。。因为你只选择了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()
编辑:
根据你的回答,你正在艰难地处理事情。根据您的回答,您有导航属性,这些属性有隐式连接。您可以这样编写查询:
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或bugsigned或任何内容。只有在没有导航属性时,才需要使用连接语法。嗯。。因为你只选择了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()
编辑:
根据你的回答,你正在艰难地处理事情。根据您的回答,您有导航属性,这些属性有隐式连接。您可以这样编写查询:
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或bugsigned或任何内容。您只需要在没有导航属性时使用连接语法。谢谢您的回答。我记得在我以前的项目中,我也做了同样的事情,而且效果很好,也许我只是记错了。不管怎样,你能帮我解决这个问题吗?嗨,谢谢你的代码示例。但仍有一个问题。现在我不能再这样做了:公共函数选择AllowenBugs作为tbl_bug的列表,这就是LINQ的全部要点,不是吗?@schoen-不是,你不能返回tbl_bug,因为tbl_bug不包含你想要的数据,除非tbl_bug具有tbl_优先级表的导航属性。如果它具有导航属性,则不需要联接,因为联接是从导航中推断出来的。谢谢您的回答。我记得在我以前的项目中,我也做了同样的事情,而且效果很好,也许我只是记错了。不管怎样,你能帮我解决这个问题吗?嗨,谢谢你的代码示例。但仍有一个问题。现在我不能再这样做了:公共函数选择AllowenBugs作为tbl_bug的列表,这就是LINQ的全部要点,不是吗?@schoen-不是,你不能返回tbl_bug,因为tbl_bug不包含你想要的数据,除非tbl_bug具有tbl_优先级表的导航属性。如果它具有导航属性,则不需要联接,因为联接是从导航中推断出来的。我的错误是,从您的回答中不清楚这是一个解决方案。如果是的话,那就把它作为一个答案贴出来,但要清楚地表明这是事实。我错了,从你的答案中不清楚这是一个解决方案。如果是的话,那就把它作为一个答案贴出来,但要明确说明事实就是如此。