Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择Linq不调用方法_C#_Linq - Fatal编程技术网

C# 选择Linq不调用方法

C# 选择Linq不调用方法,c#,linq,C#,Linq,我有这个密码Linq c# 雇主限制对注册有限制,但从不调用RestrictionDto的构造函数,只返回null。我在restrictionDto中设置了一个断点,代码永远不会停止 我以前从未见过这个问题。我在代码中有很多这样的代码,工作很好 有人可以帮忙吗?Linq查询是懒惰的,也就是说,除非有人告诉他们,否则它们实际上不会执行任何操作 换句话说,您没有要求执行查询。如果要执行查询,必须使用ToList或任何您认为适合手头任务的急切操作来完成查询。您必须知道有两种LINQ语句: 返回IEn

我有这个密码Linq c#

雇主限制对注册有限制,但从不调用RestrictionDto的构造函数,只返回null。我在restrictionDto中设置了一个断点,代码永远不会停止

我以前从未见过这个问题。我在代码中有很多这样的代码,工作很好


有人可以帮忙吗?

Linq查询是懒惰的,也就是说,除非有人告诉他们,否则它们实际上不会执行任何操作


换句话说,您没有要求执行查询。如果要执行查询,必须使用
ToList
或任何您认为适合手头任务的急切操作来完成查询。

您必须知道有两种LINQ语句:

  • 返回
    IEnumerable
    (或IQueryable)的值
  • 而那些没有
第一个组只返回一个对象,该对象包含枚举元素所需的所有内容:获取序列的第一个元素,一旦获得了一个元素,就可以获取下一个元素,直到没有剩余元素为止

注意:通过创建这个可枚举对象,您还没有枚举它

第二组,不返回
IEnumerable
的LINQ函数是实际开始枚举的函数:
ToList
ToDictionary
FirstOrDefault
Count
Max
Any

这些函数使用输入
IEnumerable
调用
GetEnumerator()
并重复调用
MoveNext()
,直到知道返回值。通常需要列举完整的序列,有时只列举其中的几个

例如:

public static bool Any<TSource>(this IEnumerable<Tsource> source)
{
     if (source == null) throw new ArgumentNullException(...);
     IEnumerator<TSource> enumrator = source.GetEnumerator();
     bool containsAnyElement = enumerator.MoveNext();

     // no need to check the rest of the sequence, I already know the result:
     return containsAnyElement;
}
他们都将在内部执行类似于以下的操作:

var enumerator = restrictions.GetEnumerator();
while(enumerator.MoveNext())
{   // there are still restrictions left
    RestrictionDto restriction = enumerator.Current;
    // do something with this restriction
}

您是否在创建查询之后的某个地方使用该查询?Linq查询在使用之前不会进行评估。是的,雇主。限制有元素。是,RestrictionD的构造函数接受正确的参数。是的,如果有任何结果,我会向“ToList”查询。这不是问题所在。问题是您在哪里使用查询结果。我知道它有元素,但您在创建查询后是否实际引用了查询?例如,通过迭代结果集,或者调用
.ToList()
?除非你这样做,否则它不会被评估。可能是,而且是专门为。也许我不清楚。结果是一个Linq结果,但当我尝试调用toList时,结果为Null,并且从不调用constructor@Paulo
ToList
将永远不会返回null。此外,如果从未调用构造函数,则表示
Employer.Restrictions
为空。也许您应该首先检查源是否为空?如果不是,而且你肯定要打电话给
ToList
,我看不出有什么理由它不起作用。。。
IEnumerable<RestrictionDto> restrictions = Employer.Restrictions
    .Select(restriction => new RescrictionDto(restriction));
var list = restrictions.ToList();
bool restrictionsAvailable = restrictions.Any();
var firstRestriction = restrictions.FirsOrDefault();
int numberOfRestrictions = restrictions.Count();
foreach (var restiction in restrictions)
{
    ...
}
var enumerator = restrictions.GetEnumerator();
while(enumerator.MoveNext())
{   // there are still restrictions left
    RestrictionDto restriction = enumerator.Current;
    // do something with this restriction
}