一个简的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,参数的类型而已,你传入相应的参数就行。