3

linq to sql は初めてです。私のクエリは、検索ボタンを使用して 1 つのサイト番号でさらに 2 つの行をフェッチすることです。外部キーを使用してテーブル間にリンクがあります。次のようなデータベースをクリアさせてください。

やあ、

tbl_user、tbl_Site、tbl_usersite、および tbl_credentials の 4 つのテーブルがあります。

表の列:

  • tbl_Site : SiteId、SiteName、SiteNumb

  • tbl_Credentials : CredId、ユーザー名、パスワード

  • tbl_User : UserId、CredIdFK、Forename、Surname

  • tbl_Usersite : UsersiteID、Site_IdFK、User_IdFk

テーブルの関係:

  • (tbl_Usersite) テーブルは、テーブル (tbl_User と tbl_Site) をリンクします。

  • tbl_user テーブルの Cred_Id は FK です

サイトのサンプル データ:

SiteId、SiteName、SiteNumb

  • 10、XXXX、1234
  • 11、YYYY、5436
  • 12、ZZZZ、3789

資格情報サンプルデータ:

CredId、ユーザー名、パスワード

  • 10、グーグル、ヤフー
  • 11, ブログ , フォーラム
  • 12、日付、時刻
  • 13、Linq、Sql
  • 14、合計、コスト

ユーザー サンプル データ:

UserId、CredId、Forename、Surname

  • 187、10、サラ、トーマス
  • 196、11、マーク、ヒル
  • 195、12、ピーター、ホッジ
  • 197、13、ブラッド、ピット
  • 198 , 14 , ブラウン , トーマス

ユーザーサイトのサンプル データ:

UsersiteId 、 SiteId 、 UserId

  • 1 、 10 、 187

  • 2 、 10 、 196

  • 3 、 10 、 195

  • 4 、 11 、 197

  • 5 、 12 、 198

クライアント テキストボックスに SiteNumber を入力し、検索ボタンをクリックします。Username 、 Password 、 UserId 、 ForeName 、および Surnameを取得する必要があります。ボタンクリックイベントのサンプルコードは

protected void btnsearch_Click(object sender, EventArgs e)
{
     string Site = txtsitenumb.Text;

    SiteDataContext sitenumb = new SiteDataContext();

     try
        {
            var siteID = (from sn in sitenumb.tbl_sites
                       where sn.site_number == Site
                       select sn.site_id_PK).First();

             var UserID = (from sn2 in sitenumb.tbl_usersites
                      **where sn2.usersite_site_id_FK == siteID
                         select  sn2.usersite_user_id_FK).First();**

             // Where the Star Marked area doesnt give the result
                if there is an access for more than one Site for the single User

             var CredID = (from sn3 in sitenumb.tbl_users
                       where sn3.user_id_PK == UserID
                       select sn3.user_credentials_id_FK).First();

            var UserName = (from sn4 in sitenumb.tbl_credentials
                            where sn4.credentials_id_PK == CredID 
                            select sn4.credentials_username).First();

            var PassWord = (from sn5 in sitenumb.tbl_credentials
                            where sn5.credentials_id_PK == CredID 
                            select sn5.credentials_password).First();

            var FirstName = (from sn6 in sitenumb.tbl_users
                             where sn6.user_id_PK == UserId 
                             select sn6.user_forename).First();

            var Lastname = (from sn7 in sitenumb.tbl_users
                            where sn7.user_id_PK == UserId 
                            select sn7.user_surname).First();



            fields s = new fields();
            s.UserName = UserName;
            s.Password = PassWord;
            s.UserId = UserID .ToString();
            s.FirstName = FirstName;
            s.LastName = Lastname;


                data.Add(s);
                ViewState["idata"] = data;

                gridview1.DataSource = data;
                gridview1.DataBind();

        }
        catch (Exception)
        {
            Label1.Text = "File Not Found";

        }   


  protected void Page_Load(object sender, EventArgs e)
{


        this.Form.DefaultButton = this.btnsearch.UniqueID;


        data = ViewState["idata"] as List<fields>;
        if (data == null)
            data = new List<fields>();


}
[Serializable]
public class fields
{
    public string UserName { get; set; }
    public string Password { get; set; }
    public string UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string TimeZone { get; set; }

}

シングル ユーザーのシングル サイト アクセスの場合、このコードは正常に機能します。すべてのサイトに関連付けられているユーザーを表示するのを手伝ってください。

** 例えば:**

ユーザーが SiteNumb 1234(Siteid 10) を入力した場合。3 人 (UserId: 187,196,195) のユーザーの詳細をすべて表示する必要があります..できるだけ早く返信してください..

どうもありがとう

4

2 に答える 2

0

これは役立つかもしれません...

var UserID = (from sn2 in sitenumb.tbl_usersites
             where sn2.usersite_site_id_FK == siteID
             select  sn2.usersite_user_id_FK).First();
//Here you will get only single UserId
var UserIds = (from sn2 in sitenumb.tbl_usersites
              where sn2.usersite_site_id_FK == siteID
              select  sn2.usersite_user_id_FK).ToList() 
// Here you will get all the UserIds of that particular site
于 2013-06-27T12:39:41.697 に答える