Изменить запрос linq как?

2

Как я могу сократить коды ниже, чем раньше? Мне нужен короткий и простой метод: Я не хочу использовать цикл 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"

  • 0
    добавил тег linq-to-entity
Теги:
linq
linq-to-entities

3 ответа

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 вернет имя или null, если отдел не выйдет.

Update:

  • Похоже, вам в данный момент нужно использовать метод Первый, поскольку комментарий ykaratoprak. Но согласно этот пост Single SingleOrDefault будет добавлен в Entity Framework 4.0.
  • 0
    Вы ошибаетесь: «Метод« Single »не поддерживается LINQ to Entities. Попробуйте вместо этого использовать метод «Первый».
  • 0
    @ykaratoprak - это немного резко; Вы не сделали очевидным, что используете EF. Этот ответ подходит для многих поставщиков LINQ, таких как LINQ-to-SQL. Я даю это +1 ...
0

Вы можете использовать "FirstOrDefault", который доступен в текущей структуре 3.5. Я думаю, что он, возможно, был включен с 3.0, но я не уверен. Я думаю, что он вернет null (в отличие от пустой строки), если элемент не найден.... но вы захотите дважды проверить это.

string name = (из d в staffContext.Departman                               где d.ID == selectedDepartman                               выберите d.Name).FirstOrDefault();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню