buscar duas linhas com um id em LINQ to SQL c #

votos
3

im novo para LINQ to SQL. minha consulta é de cerca de buscar mais duas linhas com um número de site usando a busca button.There uma ligação entre as tabelas usando chave estrangeira. Deixe-me limpar o banco de dados que parecem.

Oi,

Eu tenho quatro mesas tbl_user, tbl_Site, tbl_usersite e tbl_credentials.

colunas da tabela:

  • tbl_Site: SiteID, SiteName, SiteNumb

  • tbl_Credentials: CredId, nome de usuário, senha

  • tbl_User: UserId, CredIdFK, nome próprio, apelido

  • tbl_Usersite: UsersiteID, Site_IdFK, User_IdFk

relação Tabela:

  • (Tbl_Usersite) mesa é ligar a mesa (tbl_User e tbl_Site)

  • Na tabela tbl_user Cred_Id é o FK

dados de exemplo do site:

SiteID, SiteName, SiteNumb

  • 10, XXXX, 1234
  • 11, AAAA, 5436
  • 12, ZZZZ, 3789

Credenciais de dados de amostra:

CredId, nome de usuário, senha

  • 10, Google, Yahoo
  • 11, Blog, Forum
  • 12, data, hora
  • 13, Linq, SQL
  • 14, Total, Custo

dados de amostra do usuário:

UserId, CredId, nome próprio, apelido

  • 187, 10, Sarah, Thomas
  • 196, 11, Mark, Encosta
  • 195, 12, Peter, Hodge
  • 197, 13, Brad, Pitt
  • 198, 14, Brown, Thomas

dados amostra Usersite:

UsersiteId, SiteID, UserId

  • 1, 10, 187

  • 2, 10, 196

  • 3, 10, 195

  • 4, 11, 197

  • 5, 12, 198

O Cliente Digite o SiteNumber na caixa de texto e clicando no botão de pesquisa. Eles devem receber Nome de usuário, senha, UserId, nome próprio e apelido . e meu código de exemplo no evento de clique de botão é

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; }

}

Este código funciona bem se é o acesso local único para Single User. Por favor, me ajude a exibir o associado do usuário com todos os sites.

** Por exemplo:**

Se o utilizador introduz SiteNumb 1234 (siteid 10). Tem que mostrar todos os três (UserId: 187196195) usuários detalhes .. por favor responda o mais rápido possível ..

Muito Obrigado

Publicado 27/06/2013 em 12:16
fonte usuário
Em outras línguas...                            


2 respostas

votos
0

Como você tem mostrado suas entradas de banco de dados, pode haver mais de um usuário com acesso em um determinado site. .First() devolver o único row.Therefore você deve modificar o código para obter a lista usando ToList()método.

Por exemplo, você pode modificar o código para obter todos os usuários para o ID de site específico como: -

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

você pode modificar o código em conformidade

Respondeu 27/06/2013 em 13:42
fonte usuário

votos
0

Isso pode ajudar ...

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
Respondeu 27/06/2013 em 13:39
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more