2012-02-07 63 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