2012-02-07 58 views
1

我有基于一个ObjectDataSource查询LINQ与DDL DataTextField基于查询LINQ和ObjectDataSource

<asp:DropDownList ID="DropDownList1" runat="server" 
       DataSourceID="UserODS" DataTextField="LastName" 
       DataValueField="IDUser"> 
</asp:DropDownList> 

<asp:ObjectDataSource ID="UserODS" runat="server" 
       SelectMethod="GetListFullNameUsers" TypeName="DAL.AccessoDB"> 
</asp:ObjectDataSource> 

的方法与此下拉列表的一个问题是:

public List<String> GetListFullNameUsers() 
{ 
    using (var context = new UChipDataContext()) 
    { 
     return context.Users 
        .Select(c => new { c.LastName, c.FirstName }) 
        .ToList() 
        .Select(c => String.Concat(c.LastName," ", c.FirstName)) 
        .ToList(); 
    } 
} 

但我得到这个错误:

DataBinding:'System.String'不包含名为'LastName'的属性。

我该如何解决?

在此先感谢。

路易吉

+5

接受一些你以前的问题的答案。我希望没有人回答这个问题,直到你开始成为一个感激的用户。 – 2012-02-07 13:39:19

回答

1

OK ......这里的问题是:

您LINQ查询返回普通字符串列表和使您的数据绑定,因为这些字符串没有一个叫LastName属性失败。

一个可行的办法是使anonymous type成类,如图here返回了一个名为LastName因为你有DataTextField="LastName"等属性强类型对象的DropDownList没有想到一个名为LastName属性。

+0

匿名类型包含属性LastName,但查询返回字符串(String.Concat ...)。 – 2012-02-07 14:09:34

+0

@GertArnold:当然,我认为他的方法返回类型也是错误的。他应该真的返回一个名为LastName的属性,因为数据源期望这样。请参阅'DataTextField =“LastName”'。返回字符串列表我认为这不起作用,但这只是一个怀疑,因为我现在无法编译代码。 – 2012-02-07 14:14:02

0

人为什么你有多个选择/ toliers?

试试这个:

return context.Users 
        .Select(c => string.Format("{0} {1}", c.LastName, c.FirstName)) 
        .ToList(); 
+0

数据源需要一个名为LastName的属性,所以我认为这不起作用。但是你对查询的推理非常好。 – 2012-02-07 14:15:23