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#的“动态”功能或通过定义具体类来解决此问题。 –