首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

一个简的Linq加lamda表达式查询操作,小弟我思考很久,请高手帮助

2013-09-28 
一个简的Linq加lamda表达式查询操作,我思考很久,请高手帮助关于LINQ和ladama 几乎没有书讲他们详细的语法,

一个简的Linq加lamda表达式查询操作,我思考很久,请高手帮助

关于LINQ和ladama 几乎没有书讲他们详细的语法,我用的时候都是似懂非懂,有的比较简单查询
比如:
  var query6 = CustomerList.SelectMany(c => c.Orders);

        public static IEnumerable<TResult> SelectMany<TSource, TResult>(this IEnumerable<TSource> 
source, Func<TSource, IEnumerable<TResult>> selector);

我是这样理解,c=>c.orders 
 =>前面的c 代表 Func<TSource, IEnumerable<TResult>> selector)里面的TSource  
 =>后面的c.orders代表 Func<TSource, IEnumerable<TResult>> selector)里面的IEnumerable<TResult>> 

selector
但是下面这个查询我实在推测不出来是什么意思,不是我没看书,我下载了三本关于LINQ的书都没讲
语法基础 就是讲到lamda只讲lamda , 当查询操作符里使用lamda时,都没讲语法,就是讲,
也是一笔带过,对于一些稍复杂的情况,我实在揣摩不透语法的意思
如下查询:请高手详细讲解下语法
               query7 = from c in CustomerList.SelectMany(o => OrderList, (c, o) => new { c, o })
   where (c.c.Country == "USA") && (c.o.CustomerID == c.c.CustomerID)
                      select new { c.o, c.c };



         public static IEnumerable<TResult> SelectMany<TSource, TCollection, TResult>(
this IEnumerable<TSource> source, 
Func<TSource, IEnumerable<TCollection>> collectionSelector,
 Func<TSource, TCollection, TResult> resultSelector);


    我想,那个o=>OrdeList  是Func<TSource, IEnumerable<TCollection>>
不就是 public delegate TResult Func<T, TResult>(T arg);  但是o能是TSource吗,能是T吗
上面的语法我实在是费解,请高手帮忙仔细解释下
[解决办法]
就比如你的第一句: 

var query6 = CustomerList.SelectMany(c => c.Orders);


理论上应该是和下边的查询是等价的:
var query6= from c in CustomerList
            from o on c.Orders
            select o;

[解决办法]
1、2、3的理解 是对的。
归根结底 是对委托的理解, SelecMany传递的是一个委托(是把 一个方法传递进去),SelecMany内部会使用该委托。SelecMany 的参数 要什么类型 就构造什么类型,跟普通的方法一样。
假设 menthod(int i) 这个方法,
调用 method(1) 或者 把1 先声明 int b=1;method(b);SelecMany是不是 一样。
Func<Customer, Enumerable<Order>>  相当于 类型 int,参数的类型而已,你传入相应的参数就行。

热点排行