【求助】求一个LINQ语句写法

yixian2007 2014-08-23 11:46:17
学了LINQ,现在有一条语句,总觉得写得怪怪的,请帮忙。

现在有一个表A,表B,每表中有一个AB列相关联,想写这样一条查询语句,就是获得表A的所有列和表B的B1,B2列,请问怎么写这个LINQ语句,表达式的写法又怎么写?

还有一个问题,就是返回的是一个var类型的查询,可是如果把这个查询当成一个函数的话,应该返回什么类型呢?函数中没有var这个类型的,是返回object吗?还是?如果是单个记录还好,如果是多条记录,我应该用什么类型呢?Iqueryable<object>?
...全文
2274 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxmcxm 2015-12-12
  • 打赏
  • 举报
回复
感觉linq查询本质上就是对一组要查询的Enumerable接口对象执行foreach循环程序,多个查询就是多个foreach嵌套,select取出的就是各个foreach循环个的Enumerable对象记录值,再把取出的记录值重新组合为一个Enumerable接口类。 用linq查询的作用就是简化编程,减少代码量。
cxmcxm 2015-12-12
  • 打赏
  • 举报
回复
返回的都IEnumerable,或IEnumerable<t>泛型接口类,整个ling查询都是基于 IEnumerable接口定义的一组方法,所有from... select形式 ling查询,最后都会被编译器转化为IEnumerable的方法去执行, 如果查询结果再加上.toList()或toArrray()就变成了list<t>或数组
yixian2007 2015-11-17
  • 打赏
  • 举报
回复
引用 14 楼 hanjun0612 的回复:
用 dynamic 不是挺方便吗
如果分层了,就不方便了,经过一层之后,不知道里面出来的是什么样的数据。。
正怒月神 2015-11-13
  • 打赏
  • 举报
回复
用 dynamic 不是挺方便吗
yixian2007 2015-11-13
  • 打赏
  • 举报
回复
我最后选了一个比较笨的方法。 就是定义了一个含有所有表所有属性的类。。。。。。专门用来得到这个非正式模型的结果集
romanchaos 2014-09-12
  • 打赏
  • 举报
回复
假如是A B两张表,你可以新建一个类NewA继承A,然后添加属性B1 B2,Select的时候用这一个类就行了。另外var是类型推断,如果你select NewA那么方法的返回类型就是NewA,如果是匿名类……通常我不会这样做,匿名类只作为方法体内的运算或者输出而不是返回值,因为我对反射有童年阴影……
threenewbee 2014-09-11
  • 打赏
  • 举报
回复
引用 10 楼 wzn721721 的回复:
[quote=引用 9 楼 caozhy 的回复:] 返回object并不可怕,你可以用dynamic接收,这样无需反射就可以访问字段了。
dynamic不是反射么? 我一直以为dynamic是臃肿的反射代码的简单的实现方式呢[/quote] 你说的没错,我的意思就是指相比反射,写法上要简化很多。
mnxm 2014-09-10
  • 打赏
  • 举报
回复
引用 9 楼 caozhy 的回复:
返回object并不可怕,你可以用dynamic接收,这样无需反射就可以访问字段了。
dynamic不是反射么? 我一直以为dynamic是臃肿的反射代码的简单的实现方式呢
  • 打赏
  • 举报
回复
msdn上有一个例子 http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b 它返回了 A 的全部,以及 B 的一个属性。
  • 打赏
  • 举报
回复
引用 楼主 yixian2007 的回复:
还有一个问题,就是返回的是一个var类型的查询,可是如果把这个查询当成一个函数的话,应该返回什么类型呢?函数中没有var这个类型的,是返回object吗?还是?如果是单个记录还好,如果是多条记录,我应该用什么类型呢?Iqueryable<object>?
谁跟你说过“var是一个类型”的呢?如果你把var语法当作一个类型,那么你根本没有搞懂var语法。 var是类型推断,编译器可以把赋值语句右边的类型,自动设置给左边的变量。 而“函数”又不是赋值语句,c#语言标准现在的版本还没有这个功能给你去推断函数的返回类型。所以你不能这样写,你必须像没有var语法那个年代一样去明确写出类型。
  • 打赏
  • 举报
回复
先学会 sql 编程,先学习关系数据运算知识。
threenewbee 2014-08-23
  • 打赏
  • 举报
回复
返回object并不可怕,你可以用dynamic接收,这样无需反射就可以访问字段了。
threenewbee 2014-08-23
  • 打赏
  • 举报
回复
学了LINQ,现在有一条语句,总觉得写得怪怪的,请帮忙。 现在有一个表A,表B,每表中有一个AB列相关联,想写这样一条查询语句,就是获得表A的所有列和表B的B1,B2列,请问怎么写这个LINQ语句,表达式的写法又怎么写? var query =from a in db.A join b in db.B on a.a equals b.b select new { a.列1, a.列2, ... , b.b1, b.b2 }; 还有一个问题,就是返回的是一个var类型的查询,可是如果把这个查询当成一个函数的话,应该返回什么类型呢?函数中没有var这个类型的,是返回object吗?还是?如果是单个记录还好,如果是多条记录,我应该用什么类型呢?Iqueryable<object>? 要么你定义一个类,要么返回object
yixian2007 2014-08-23
  • 打赏
  • 举报
回复
引用 6 楼 sp1234 的回复:
[quote=引用 4 楼 yixian2007 的回复:] 总不能一个查询返回就要定一个类吧。
当然你必须定一个类。除非以后c#语法版本升级了。[/quote] 无语,想了半天,没有解决办法,这样的话,岂不是没有办法将具体的查询和业务分开?除非定义类。 看网上有一种办法,使用的是委托,但是测试没有成功,也不知道哪里出了问题。
  • 打赏
  • 举报
回复
引用 4 楼 yixian2007 的回复:
总不能一个查询返回就要定一个类吧。
当然你必须定一个类。除非以后c#语法版本升级了。
  • 打赏
  • 举报
回复
你必须自己写明返回类型,就好像没有var语法那个年代一样。这还不明白么?
yixian2007 2014-08-23
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
[quote=引用 楼主 yixian2007 的回复:] 还有一个问题,就是返回的是一个var类型的查询,可是如果把这个查询当成一个函数的话,应该返回什么类型呢?函数中没有var这个类型的,是返回object吗?还是?如果是单个记录还好,如果是多条记录,我应该用什么类型呢?Iqueryable<object>?
谁跟你说过“var是一个类型”的呢?如果你把var语法当作一个类型,那么你根本没有搞懂var语法。 var是类型推断,编译器可以把赋值语句右边的类型,自动设置给左边的变量。 而“函数”又不是赋值语句,c#语言标准现在的版本还没有这个功能给你去推断函数的返回类型。所以你不能这样写,你必须像没有var语法那个年代一样去明确写出类型。[/quote] 唉,大家都好严肃啊。我其实知道var是类型推断的意思,是让编译器自己推断类型,我的重点不在这里啊,我的重点是函数返回值的类型,查询出来的东西,有时候就是一个列表,不完全是现有的类,那我应该返回什么呢?总不能一个查询返回就要定一个类吧。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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