【发布时间】:2013-06-24 20:49:21
【问题描述】:
我是 linq to sql 的新手。我的查询是关于使用搜索按钮用一个站点号再获取两行。使用外键的表之间有一个链接。 让我清理一下数据库是什么样子的。
嗨,
我有四个表 tbl_user、tbl_Site、tbl_usersite 和 tbl_credentials。
表格列:
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、名字、姓氏
- 187 , 10 , 莎拉 , 托马斯
- 196、11、马克、希尔
- 195 , 12 , 彼得, 霍奇
- 197、13、布拉德、皮特
- 198 , 14 , 布朗 , 托马斯
用户站点示例数据:
用户站点ID、站点ID、用户ID
1、10、187
2、10、196
3、10、195
4、11、197
5、12、198
客户端在文本框中输入站点编号,然后单击搜索按钮。他们应该得到 用户名、密码、用户名、前名和姓氏。我在按钮单击事件中的示例代码是
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)。它必须显示所有三个(UserId:187,196,195)用户详细信息..请尽快回复..
非常感谢
【问题讨论】:
-
尽快,因为你说
.First()它让你明白,你想如何显示它(比如连接它们??)我想你应该处理一个值列表,然后过滤掉您的需求的基础很多或只有一个 -
你使用 First() 获取 UserId,这只会给你一个 UserId...
-
你可以使用 .ToList() 来返回所有相关的结果。
-
@FullTimeSkeleton 感谢您的回复。如果我使用 .Tolist() 'var credID = (from sn3 in sitenumb.tbl_users where sn3.user_id_PK == UserID select sn3.user_credentials_id_FK).First();'不能在下一条语句中使用 Userid 来获取凭据 ID。
-
@V4Vendetta 感谢您的回复。我需要显示用户与站点(多个或一个)关联的水。
标签: c# asp.net sql linq-to-sql