2009-06-21 6 views
2

Comment puis-je raccourcir les codes ci-dessous? J'ai besoin d'une méthode courte et simple: Je ne veux pas utiliser la boucle foreach parce que j'ai une valeur.Modifier la requête linq comment?

public partial class Test : System.Web.UI.Page 
    { 
     StaffManagementEntities staffContext; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       LoadStaffPersonel(); 
      } 
     } 

     void LoadStaffPersonel() 
     { 
      int selectedDepartman = Convert.ToInt32(Request.QueryString["SelectedDepartmanID"]); 
      string name=""; 
      using (staffContext = new StaffManagementEntities()) 
      { 

       var DepartmanName = from d in staffContext.Departman 
            where d.ID == selectedDepartman 
            select d; 
       foreach (Departman d in DepartmanName) 
       { 
        name = d.Name; 
       } 

       ObjectResult<StaffsPersonel> personalData = staffContext.GetPersonelData(name); 
       gvPersonel.DataSource = personalData; 
       gvPersonel.DataBind(); 

      } 
     } 

    }

Comment utiliser la valeur de chaîne au lieu de "var DepartmanName"

+0

ajouté le tag linq-to-entities – BengtBe

Répondre

3

Quelque chose comme:

string name = (from d in staffContext.Departman 
       where d.ID == selectedDepartman 
       select d.Name).First(); 

ou:

string name = staffContext.Departman.Where(d=>d.ID == selectedDepartman) 
        .First().Name; 
1

Est-ce que vous essayez de faire?

string name = (from d in staffContext.Departman 
           where d.ID == selectedDepartman 
           select d.Name).SingleOrDefault(); 

Le SingleOrDefault retourne le nom ou nul si le ministère ne sort pas.

Mise à jour:

  • On dirait que vous au moment besoin d'utiliser la méthode Première comme ykaratoprak commenté. Mais selon this post le Single/SingleOrDefault sera ajouté dans Entity Framework 4.0.
+0

Vous êtes dans l'erreur: 'La méthode' Single 'n'est pas supportée par LINQ to Entities. Pensez à utiliser la méthode 'First' à la place. ' – Penguen

+0

@ykaratoprak - c'est un peu dur; vous n'avez pas fait comprendre que vous utilisiez EF. Cette réponse conviendrait à de nombreux fournisseurs LINQ, tels que LINQ-to-SQL. Je lui donne +1 ... –

0

Vous pouvez utiliser "FirstOrDefault" qui est disponible dans le framework 3.5 actuel. Je pense qu'il a peut-être été inclus avec 3.0, mais je ne suis pas certain. Je pense qu'il renverra null (par opposition à une chaîne vide) si l'article n'est pas trouvé .... mais vous voudrez vérifier ceci.

nom de chaîne

= (de d à staffContext.Departman où d.ID == selectedDepartman sélectionner d.Name) .FirstOrDefault();