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) のユーザーの詳細をすべて表示する必要があります..できるだけ早く返信してください..
どうもありがとう