我对使用LINQ to SQL(但熟悉LINQ to objects)完全陌生,我很好奇为什么以下代码不会引发异常或错误,但是不会创建GridView并绑定数据。
这是在webform的Page_Load事件中:
ContactsDataContext db = new ContactsDataContext();
db.Contacts.Where(x => x.Phone.Length > 0);
GridView gv = new GridView();
gv.DataSource = db.Contacts;
gv.DataBind();
如果我在设计器中拖放GridView并将DataSource设置为LINQ to SQL,它将按预期工作。 LinqDataSource的标记
<asp:LinqDataSource ID="LinqDataSource1" runat="server"
ContextTypeName="LinqExample.ContactsDataContext" EntityTypeName=""
TableName="Contacts">
</asp:LinqDataSource>
Contacts是.dbml文件中唯一的表。我错过了什么?
答案 0 :(得分:3)
调用查询的ToList()。此外,您的过滤不正确。您需要将过滤器设置为变量。你不能只调用Where()。正如您的代码现在,您将返回表中的所有联系人记录。此外,您需要将GridView添加到页面上已有的控件。
ContactsDataContext db = new ContactsDataContext();
var filteredContacts = db.Contacts.Where(x => x.Phone.Length > 0);
GridView gv = new GridView();
gv.DataSource = filteredContacts.ToList();
gv.DataBind();
this.Controls.Add(gv);
答案 1 :(得分:0)
从下面的链接看起来你需要为LINQ命令创建一个函数,该函数将返回LIST类型,然后调用它:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
gvitems.DataSource = GetItemsRecord();
gvitems.DataBind();
}
}
public List<ITEM> GetItemsRecord()
{
BindGridViewDataContext db = new BindGridViewDataContext();
var listitemsrecord = (from x in db.ITEMs select x).ToList<ITEM>();
return listitemsrecord;
}
https://www.c-sharpcorner.com/UploadFile/70dbe6/how-to-bind-gridview-using-linq-to-sql/