1
我使用LINQ to Entities
數據綁定:LINQ到實體無法識別方法 'System.String的ToString()' 方法
我的GridView如下:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True"
EmptyDataText="No Data" CellPadding="3" CellSpacing="1"
AllowSorting="True" OnPageIndexChanging="GridView1_PageIndexChanging" OnRowCancelingEdit="GridView1_RowCancelingEdit"
OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" CssClass="gridview"
OnSorting="GridView1_Sorting" HorizontalAlign="Center">
<AlternatingRowStyle BackColor="#F0F0F0" />
<Columns>
<asp:BoundField HeaderText="ID" DataField="ID" ReadOnly="True" SortExpression="ID" />
<asp:BoundField HeaderText="Name" DataField="SoftwareName" SortExpression="Name" />
<asp:BoundField HeaderText="Key" DataField="Key" SortExpression="Key" />
<asp:BoundField HeaderText="Date" DataField="Date" ItemStyle-CssClass="date_td" SortExpression="Date"
ReadOnly="True">
<ItemStyle CssClass="date_td"></ItemStyle>
</asp:BoundField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton runat="server" ToolTip="edit" ID="EditButton" CommandName="Edit"
ImageUrl="~/images/edit.png" />
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton runat="server" ID="UpdateButton" ToolTip="Submit" CommandName="Update"
ImageUrl="~/images/ok.gif" />
<asp:ImageButton runat="server" ID="Cancel" ToolTip="Submit" CommandName="Cancel"
ImageUrl="~/images/cancel.gif" />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton runat="server" ToolTip="Delete" ID="btnDelete" CommandName="cDelete"
ImageUrl="~/images/delete.png" OnCommand="OnDelete" CommandArgument='<%# Bind("id") %>'
OnClientClick="return confirm('Are you sure ?')" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerSettings Mode="NumericFirstLast" />
</asp:GridView>
我填在GridView用下面的C#代碼:
private IQueryable SortGridView()
{
IQueryable<Softwares> softwares = Search();
if (softwares == null) return null;
string sortExpression = (ViewState["SortExpression"] as string) == null
? "ID"
: ViewState["SortExpression"] as string;
string lastDirection = (ViewState["SortDirection"] as string) == null
? "ASC"
: ViewState["SortDirection"] as string;
switch (sortExpression)
{
case "ID":
softwares = (lastDirection == "ASC")
? softwares.OrderBy(q => q.id)
: softwares.OrderByDescending(q => q.id);
break;
case "Name":
softwares = lastDirection == "ASC"
? softwares.OrderBy(q => q.softwareName)
: softwares.OrderByDescending(q => q.softwareName);
break;
case "Key":
softwares = (lastDirection == "ASC")
? softwares.OrderBy(q => q.Keys.Key)
: softwares.OrderByDescending(q => q.Keys.Key);
break;
case "Date":
softwares = lastDirection == "ASC"
? softwares.OrderBy(q => q.Date)
: softwares.OrderByDescending(q => q.Date);
break;
}
return from q in softwares
select new
{
ID = q.id,
SoftwareName = q.softwareName,
Key = q.Keys.Key
Date = q.Date.ToString()
};
}
protected void ButtonSearch_Click(object sender, EventArgs e)
{
GridView1.DataSource = SortGridView();
GridView1.DataBind();// <<--- Exception
}
但ButtonSearch_Click
我得到以下異常:
LINQ到實體無法識別方法「System.String的ToString()」方法,而這種方法不能被翻譯成店表達
我受夠了沒有LINQ到SQL之前完成它任何問題,這裏有什麼問題?
感謝,但在'ForEach'線,當我想分配給item.Date.ToString item.Data,發生這樣的錯誤:'屬性或索引'AnonymousType#1.Date'不能被分配給 - 它是隻讀的' –
此外,還有另一個錯誤:'錯誤不能隱式地將類型'字符串'轉換爲'System.DateTime'' –
那麼我看到問題。您從「SortGridView」方法返回一個匿名類型。匿名類型範圍僅限於定義它們的類中。您可以通過使用C#的「動態」功能或通過定義具體類來解決此問題。 –