Dapper多表查询无法设置数据源

yaotomo 2015-07-25 10:04:14
下面的代码是没有问题的,可以正常绑定数据源


using (IDbConnection conn = DbProviderFactories.GetFactory(connStr.ProviderName).CreateConnection())
{
conn.ConnectionString = connStr.ConnectionString;

var sql = "select * from EMP,DEPT where EMP.deptno=DEPT.deptno";
var list = conn.Query<Model.EMP, Model.DEPT, Model.EMP>(sql, (EMP, DEPT) => { return EMP; }, null, null, true, "DEPTNO");
if (list.Count() == 0)
{
MessageBox.Show("没有查询到数据!"); return;
}
dataGridViewDemo.DataSource = list;
}


可是我如果用Query()方法的另一个重载,DataGridView上却什么数据也不显示,设置断点list已经有值,说明已经查询到数据了,可就是绑定不成功。EMP表和DEPT表的实体我都已经建好了。list.ToList()也不行,其实list本身就已经实现了IEnumerable接口可以直接绑定的。

using (IDbConnection conn = DbProviderFactories.GetFactory(connStr.ProviderName).CreateConnection())
{
conn.ConnectionString = connStr.ConnectionString;
var list = conn.Query("select EMP.* from EMP,DEPT where EMP.deptno=DEPT.deptno");

if (list.Count() == 0)
{
MessageBox.Show("没有查询到数据!"); return;
}
dataGridViewDemo.DataSource = list;
}
...全文
339 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cocoxox 2019-01-04
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
实体返回时,绑定的数据取法应该是从属性获取,你要不试验下实体里面的某个属性改成字段,看数据能不能被绑定上,dynamic的那个说实话我也不知道它是个啥东西,获取到的是属性还是字段呢?
yaotomo 2015-07-28
  • 打赏
  • 举报
回复
引用 2 楼 starfd 的回复:
直接Query而不指定Type时,返回的是dynamic吧,这时候你先确认下通过xxx.YYY能取到数据吗,然后这个适用于数据绑定吗?
恩,是dynamic,list[0].XXX 是没有属性的智能提示的 可是两种方式不是都返回dynamic数据吗,为什么第二种就绑定不上数据呢?
yaotomo 2015-07-28
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
你查到的是首要条件,然后根据这个会有后续取值逻辑,估计IList的话是用的属性取值
不知道怎么改代码?
  • 打赏
  • 举报
回复
你查到的是首要条件,然后根据这个会有后续取值逻辑,估计IList的话是用的属性取值
yaotomo 2015-07-28
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
实体返回时,绑定的数据取法应该是从属性获取,你要不试验下实体里面的某个属性改成字段,看数据能不能被绑定上,dynamic的那个说实话我也不知道它是个啥东西,获取到的是属性还是字段呢?
网上找了一段话
引用
DataGridView的DataSource属性为object类型,但并不意味着任何类型都可以作为DataGridView的数据源。DataGridView的数据源必须是实现以下接口的任意类型: (1)IList 接口,包括一维数组。 (2)IListSource 接口,例如,DataTable和DataSet类。 (3)IBindingList 接口,例如,BindingList<T>类。 (4)IBindingListView 接口,例如,BindingSource类。 而LINQ查询结果为IEnumerable<T>或IQueryable<T>类型,如果直接作为数据源绑定到DataGridView,将无法显示任何内容。Enumerable类为IEnumerable<T>接口定义了一系列扩展方法,其中的ToList<T>方法可以将IEnumerable<T>转换为List<T>。这样,就可以绑定到DataGridView了
而我即使将结果ToList()后再设置数据源,DataGridView仍然不显示任何数据。
yaotomo 2015-07-28
  • 打赏
  • 举报
回复
其实获取数据的是Dapperrow类型的
  • 打赏
  • 举报
回复
直接Query而不指定Type时,返回的是dynamic吧,这时候你先确认下通过xxx.YYY能取到数据吗,然后这个适用于数据绑定吗?
yaotomo 2015-07-26
  • 打赏
  • 举报
回复
自己顶一下。。

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧