LINQ使用延迟执行模型,这意味着在调用Linq运算符时不返回结果序列,而是这些运算符返回一个对象,该对象只有在枚举此对象时才会生成序列的元素.
虽然我理解延迟查询是如何工作的,但我在理解延迟执行的好处时遇到了一些麻烦:
1)我已经读过只有在你真正需要结果时执行的延迟查询才会有很大的好处.那么这个好处是什么?
2)延迟查询的其他优点是,如果您定义一次查询,那么每次枚举结果时,如果数据发生更改,您将得到不同的结果.
a)但是从下面的代码中可以看出,我们能够实现相同的效果(因此,每次枚举资源时,如果数据发生变化,我们会得到不同的结果),即使不使用延迟查询:
List<string> sList = new List<string>( new[]{ "A","B" });
foreach (string item in sList)
Console.WriteLine(item); // Q1 outputs AB
sList.Add("C");
foreach (string item in sList)
Console.WriteLine(item); // Q2 outputs ABC
Run Code Online (Sandbox Code Playgroud)
3)延期执行是否还有其他好处?
找出哪些.net框架linq方法(例如.IEnumerable linq方法)使用延迟执行而不是使用延迟执行实现的最快方法是什么.
虽然编码很多次,但我想知道这个是否会以正确的方式执行.找出答案的唯一方法是访问MSDN文档以确保.会不会有更快的方式,任何目录,网络上的任何列表,任何备忘单,你可以分享的任何其他技巧?如果是,请这样做.这将有助于许多linq新手(像我一样)减少错误.唯一的另一个选择是检查文档,直到一个人使用它们足以记住(这对我来说很难,我往往不记得在某处记录的"任何东西",可以查找:D).
我有一个linq连接查询wriiten,我想取值,如果其中一个是空的...
码:
var Details =
UnitOfWork.FlightDetails
.Query()
.Join
(
PassengersDetails,
x => x.Flightno,
y => y.FlightNo,
(x, y) => new
{
y.PassengerId,
y.classType,
x.Flightno,
x.FlightName,
}
);
Run Code Online (Sandbox Code Playgroud)
我想用...
"Above query".DefaultIfEmpty
(
new
{
y.PassengerId,
y.classType,
string.Empty,
string.Empty
}
);
Run Code Online (Sandbox Code Playgroud)
"FlightDetails"是类上的Idatarepository类型,"PassengerDetails"是可查询的局部变量结果.如何获得乘客ID和Classtype的结果,并且整体结果中不包含flightno和flightname.