如何以编程方式设置标签文本 - Linq To Entities

时间:2010-08-16 16:27:05

标签: linq text linq-to-entities label

我必须根据用户偏好在网页上设置不同标签加载的标签文本。

我有以下代码放在标签加载事件上(可能是错误的!)

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 个答案:

答案 0 :(得分:2)

你需要.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();

答案 1 :(得分:2)

您正在编写查询,然后要求将该查询转换为字符串。您只想要该查询的第一个结果吗?如果是这样,很容易:

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

ToString()将返回您看到的对象类型,您需要做的是:

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