Как программно установить текст метки - Linq To Entities - PullRequest
0 голосов
/ 16 августа 2010

Я должен установить текст метки для загрузки разных меток на веб-странице в соответствии с предпочтениями пользователя.

У меня есть следующий код, который помещается в событие загрузки метки (возможно, неправильно!)

string memberid = Session["MemberID"].ToString();
            string locationid = Session["LocationID"].ToString();
            string userName = Membership.GetUser().UserName;
            string uuf1 = "UnitUserField1";

            MyEntities lblUUF1Text = new MyEntities();

            lblUUF1.Text = lblUUF1Text.tblUserPreferences
                            .Where(p => p.MemberID == memberid && p.LocationID == locationid && p.Username == userName && p.ColumnName == uuf1)
                            .Select(p => p.Alias)
                            .ToString();

Однако, когда я запускаю это, возвращается текст метки:

System.Data.Objects.ObjectQuery`1 [System.String]

Может кто-то указать мне на ошибку моих путей. Я чувствую себя очень, очень толстым в данный момент.

Ответы [ 3 ]

2 голосов
/ 16 августа 2010

Вы пишете запрос и затем запрашиваете преобразование этого запроса в строку. Вы хотите только первый результат этого запроса? Если это так, это просто:

lblUUF1.Text = lblUUF1Text.tblUserPreferences
                          .Where(p => p.MemberID == memberid && 
                                 p.LocationID == locationid && 
                                 p.Username == userName && p.ColumnName == uuf1)
                        .Select(p => p.Alias)
                        .First();

(я предполагаю, что тип p.Alias уже равен string, но вы включили вызов ToString как попытку принудить запрос в строку, чтобы он компилировался.)

Обратите внимание, что если есть нет результатов, это приведет к исключению. В противном случае это займет первый результат. Другие варианты:

  • Конечно, есть только один результат? Используйте Single()
  • Думаете, есть ноль или один? Используйте SingleOrDefault(), сохраните в локальной переменной и установите текст метки, если результат не равен нулю.
  • Думаете, есть что-нибудь от нуля до многих? Используйте FirstOrDefault() таким же образом.
2 голосов
/ 16 августа 2010

Вам нужно .First() там

lblUUF1.Text = lblUUF1Text.tblUserPreferences
                            .Where(p => p.MemberID == memberid && p.LocationID == locationid && p.Username == userName && p.ColumnName == uuf1)
                            .Select(p => p.Alias).First().ToString();
0 голосов
/ 16 августа 2010

ToString () вернет тип объекта, как вы видите, что вам нужно сделать, это:

lblUUF1.Text = lblUUF1Text.tblUserPreferences
                .Where(p => p.MemberID == memberid && p.LocationID == locationid && p.Username == userName && p.ColumnName == uuf1)
                .Select(p => p.Alias).SingleOrDefault();
...