简体   繁体   中英

Fetch data From Two tables using Linq

all 1st of all I want to say I am totally new to Entity Framework but I want to learn it so My question is I have three tables. 1st for storing author details.
Structure of the table is

在此输入图像描述

2nd table for storing all the articles
Structure of the table is

在此输入图像描述

and Table 3 for Storing comments
Structure of the table is

在此输入图像描述

and as My client want I have no foreign key in Database but they have relations and I am handling them from code (Please don't ask why because I also don't know why my client don't want foreign Key) :)

What I am doing Now I have an Admin Panel where there is a Grid View Where I am binding the Author Table and on Clicking of Any Row it will open another page

Page source Code Example:

<div>
 <asp:ListView ID="articles" runat="server">
<ItemTemplate>
Label1//Here Goes the Article Id
Label2//Here Goes the Article Names
<div>
//Another Listview For Comments
 <asp:ListView ID="comments" runat="server">
<ItemTemplate>
Here Goes All the Comments
</ItemTemplate>
</asp:ListView>
</div>
</ItemTemplate>
</asp:ListView>

So What I am doing First I am binding the Article List and after binding I am doing a Foreach Loop Inside the article List to find all the article id and the Comment List view Note: As for the code You can see the comment list will be repeated for each article Once I find the Comment ID the I fetch the comments for that id and bind it to the Comment List.

So here my problem is I am connecting to the DB for two times but I want to do this in a Single connection is there any way by which I can fetch all the rows of comment table for the article id while fetching the Articles.

My Article Fetching code is

Context.Artcles.Select(x=>x.x.RefAuth==AuthId).ToList();

I will get the AuthID from GridView Row Click.

I know it is not a huge thing but I am totally new in this.

Question:2

Thanks to Ehsan Sajjad for giving me the perfect solution So there is another Question. In my first Question I was getting data from two tables so The suggestion was to use Join in Linq but in my Second Question I have one table and the Table format is like this.
在此输入图像描述
If the type is 1 then Received else if the type is 2 then replied.
Refmailid is when I will reply to a mail for ex if "mailid" is 1 then for that reply "refmailid" will be 1 by which I can fetch all the replies of one mail So what I want, just like articles and comments here also I am fetching all the received mails from a user the from Column is a Unique Userid

so when I will fetch

Context.SupportRequests.Select(x=>x.from=="theuniqueuserid" && type==1).ToList();

I will get all the received mails from that use and just like the previous div

<div>
     <asp:ListView ID="receivedmails" runat="server">
    <ItemTemplate>
    Label1//Here Goes subject
    Label2//Here Goes the content
    <div>
    //Another Listview For Replies
     <asp:ListView ID="replies" runat="server">
    <ItemTemplate>Here Goes All the replies will be more then one so it will be reapeated
with 
//Subject
//Content
    </ItemTemplate>
    </asp:ListView>
    </div>
    </ItemTemplate>
    </asp:ListView>
</div>

So What I am doing? First I am binding the Received List and after binding I am doing a Foreach Loop Inside the Received List to find all the "mailid" and the replied List view Note: As for the code You can see the replied list will be repeated for each received mail Once I find the "mailid" then I will fetch the replies for that id and bind it to the reply List. Code for that

 Context.SupportRequests.Select(x=>x.refmailid=="mailid").ToList();

You need join

var result = (from a in Context.Articles
             join c in Context.Comments on a.ArticleId equals c.ArticleId
             select new{ Article = a, Comment = c});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM