1

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>

4

1 に答える 1

4

うーん..bだけを選択しているので?これはトリックの質問ですか?

Linqは、選択するように指示したものだけを選択し、選択するように指示しました。他の値が必要な場合は、それらも選択する必要があります。そのための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などに簡単にアクセスできます。ナビゲーションプロパティがない場合にのみ、結合構文を使用する必要があります。

于 2012-08-24T04:19:56.557 に答える