2009-06-21 65 views
2

如何縮短以下代碼? 我需要簡短的方法: 我不想使用foreach循環,因爲我有一個值。修改linq查詢如何?

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(); 

      } 
     } 

    }

如何使用字符串值,而不是 「無功DepartmanName」

+0

添加了標籤linq-to-entities – BengtBe 2009-06-21 18:15:08

回答

3

喜歡的東西:

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

或:

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

難道這就是你想幹什麼?

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

如果部門不退出的的SingleOrDefault將返回名稱或空。

更新:

  • 此刻好像你需要使用首先方法ykaratoprak評論。但根據this post,Single/SingleOrDefault將被添加到實體框架4.0中。
+0

您錯誤:'LINQ to Entities不支持'Single'方法。考慮使用「First」方法。「 – Penguen 2009-06-21 18:01:07

0

您可以使用當前3.5框架中的「FirstOrDefault」。我認爲它可能包含在3.0中,但我不確定。我認爲它會返回null(而不是空字符串),如果該項目沒有找到....但你會想再仔細檢查一下。

string name =(從staffContext.Departman中的d開始 其中d.ID == selectedDepartman select d.Name).FirstOrDefault();