【问题标题】:fetch two rows with one id in linq to sql c#在linq to sql c#中获取具有一个id的两行
【发布时间】: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


【解决方案1】:

这可能会有所帮助...

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

【讨论】:

    【解决方案2】:

    正如您显示的数据库条目,可能有多个用户可以访问特定站点。.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();
    

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

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      • 2019-08-27
      相关资源
      最近更新 更多