3

我是 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, 年年, 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、布朗、托马斯

用户站点样本数据:

用户站点标识 , 站点标识 , 用户标识

  • 1 , 10 , 187

  • 2 , 10 , 196

  • 3 , 10 , 195

  • 4、11、197

  • 5、12、198

客户端在文本框中输入站点编号,然后单击搜索按钮。他们应该得到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)。它必须显示所有三个(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 回答
0

正如您所显示的数据库条目,可能有多个用户可以访问特定站点。.First() 返回单行。因此您应该修改代码以使用ToList()方法获取列表。

例如,您可以修改代码以获取特定站点 ID 的所有用户:-

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

您可以相应地修改您的代码

于 2013-06-27T12:42:21.957 回答