【问题标题】:Modify linq query how to?修改linq查询如何?
【发布时间】:2009-06-21 17:55:05
【问题描述】:

我怎样才能比以前更短以下代码? 我需要简短的方法: 我不想使用 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”

【问题讨论】:

  • 添加标签 linq-to-entities

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


【解决方案1】:

类似:

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;

【讨论】:

    【解决方案2】:

    这是你想要做的吗?

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

    如果部门没有退出,SingleOrDefault 将返回名称或 null。

    更新:

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

    【讨论】:

    • 您错了:“LINQ to Entities 不支持“Single”方法。考虑改用“First”方法。”
    • @ykaratoprak - 这有点苛刻;您没有明确表示您正在使用 EF。对于许多 LINQ 提供程序,例如 LINQ-to-SQL,这个答案会很好。我给它 +1...
    【解决方案3】:

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

    字符串名称=(来自staffContext.Departman中的d 其中 d.ID == selectedDepartman 选择 d.Name).FirstOrDefault();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多