修改linq查询怎么样?

时间:2009-06-21 17:55:05

标签: c# .net asp.net linq linq-to-entities

我如何缩短以下代码? 我需要简短的方法: 我不想使用foreach循环,因为我有一个值。

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

            }
        }

    }

如何使用字符串值代替“var DepartmanName”

3 个答案:

答案 0 :(得分: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 :(得分:1)

这是你想要做的吗?

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

SingleOrDefault 将返回名称,如果部门未退出,则返回null。

<强>更新

  • 目前您似乎需要使用第一方法 ykaratoprak 进行评论。但根据this post,Single / SingleOrDefault将添加到Entity Framework 4.0中。

答案 2 :(得分:0)

您可以使用当前3.5框架中提供的“FirstOrDefault”。我认为它可能已包含在3.0中,但我不确定。我认为如果找不到该项,它将返回null(而不是空字符串)....但是你要仔细检查它。

string name =(来自staffContext.Departman中的d)                                 其中d.ID == selectedDepartman                                 选择d.Name).FirstOrDefault();