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
如何将外部参数传递给CRM中的LINQ where子句_Linq_Dynamics Crm 2011 - Fatal编程技术网

如何将外部参数传递给CRM中的LINQ where子句

如何将外部参数传递给CRM中的LINQ where子句,linq,dynamics-crm-2011,Linq,Dynamics Crm 2011,我有一个LINQ查询,它可以很好地用于独立列表,但无法用于CRM var lst = new List<bool?>(); lst.Add(null); lst.Add(true); lst.Add(false); bool IsWet = false; var newlst = from exch_HideVoiceSignature in lst where (((exch_HideVoiceSignature!=null && exch_HideVoi

我有一个LINQ查询,它可以很好地用于独立列表,但无法用于CRM

    var lst = new List<bool?>();
lst.Add(null);
lst.Add(true);
lst.Add(false);
bool IsWet = false;
var newlst = from exch_HideVoiceSignature in lst where 
(((exch_HideVoiceSignature!=null && exch_HideVoiceSignature==false 
||    exch_HideVoiceSignature== null) )&& !IsWet) select exch_HideVoiceSignature;
newlst.Dump();

var question = from q in exch_questionSet where ((q.exch_HideVoiceSignature != null 
&& q.exch_HideVoiceSignature.Value == 0 )|| q.exch_HideVoiceSignature == null )
&& !IsWet select q.exch_HideVoiceSignature;
question.FirstOrDefault().Dump();
var lst=newlist();
lst.Add(空);
lst.Add(真);
1.添加(假);
bool IsWet=false;
var newlst=来自lst中的exch_HideVoiceSignature,其中
(((exch_HideVoiceSignature!=null&&exch_HideVoiceSignature==false
||exch_HideVoiceSignature==null))&&!IsWet)选择exch_HideVoiceSignature;
newlst.Dump();
var question=来自exch_questionSet中的q,其中((q.exch_HideVoiceSignature!=null
&&q.exch_HideVoiceSignature.Value==0)| | q.exch_HideVoiceSignature==null)
&& !IsWet选择q.exch\U隐藏签名;
问题.FirstOrDefault().Dump();
如您所见,我可以将变量IsWet传递给LINQ查询以获得标准列表fine,并获取第一个列表的值。但当我对第二个列表执行相同的操作时,我得到了以下错误


无效的“where”条件。实体成员正在调用无效的属性或方法

我经常遇到这个问题

尝试从CRM中“分离”(例如调用.ToArray())您的查询(当它处于“清除”状态时),然后使用外部参数筛选查询。这应该会有所帮助

var question = 
    (from q in exch_questionSet
    where (
    (q.exch_HideVoiceSignature != null && q.exch_HideVoiceSignature.Value == 0 ) || 
    q.exch_HideVoiceSignature == null )
    select q.exch_HideVoiceSignature
    ).ToArray().Where(q => !IsWet);


question.FirstOrDefault().Dump();
使现代化
如果您使用
IsWet
标志来控制条件块(从代码中的一个点启用和禁用它们),那么您可能对名为的类感兴趣,该类允许您动态构造谓词。

我经常遇到这个问题

尝试从CRM中“分离”(例如调用.ToArray())您的查询(当它处于“清除”状态时),然后使用外部参数筛选查询。这应该会有所帮助

var question = 
    (from q in exch_questionSet
    where (
    (q.exch_HideVoiceSignature != null && q.exch_HideVoiceSignature.Value == 0 ) || 
    q.exch_HideVoiceSignature == null )
    select q.exch_HideVoiceSignature
    ).ToArray().Where(q => !IsWet);


question.FirstOrDefault().Dump();
使现代化
如果您使用
IsWet
标志来控制条件块(从代码中的一个点启用和禁用它们),那么您可能会对名为的类感兴趣,该类允许您动态构造谓词。

CRM LINQ提供程序不支持您尝试的评估。它仅支持在标准正在评估实体字段的情况下评估

这不是问题。由于您希望LINQ查询仅在
IsWet
为false时使用where子句(如果我在这一点上有错误,请更正我),因此我们只需进行计算,以确定是否应添加
where
子句。然后执行查询

   var question = from q in exch_questionSet
                  select q.exch_HideVoiceSignature;

    if (!IsWet)
    {
        question.Where(x => ((x.exch_HideVoiceSignature != null
                       && x.exch_HideVoiceSignature.Value == 0) || x.exch_HideVoiceSignature == null));
    }

    question.FirstOrDefault().Dump();

CRM LINQ提供程序不支持您尝试的评估。它仅支持在
标准正在评估实体字段的情况下评估

这不是问题。由于您希望LINQ查询仅在
IsWet
为false时使用where子句(如果我在这一点上有错误,请更正我),因此我们只需进行计算,以确定是否应添加
where
子句。然后执行查询

   var question = from q in exch_questionSet
                  select q.exch_HideVoiceSignature;

    if (!IsWet)
    {
        question.Where(x => ((x.exch_HideVoiceSignature != null
                       && x.exch_HideVoiceSignature.Value == 0) || x.exch_HideVoiceSignature == null));
    }

    question.FirstOrDefault().Dump();

只是因为我有一个包含许多其他连接等的现有查询,并且我想将这个附加参数传递给它,所以我最终使用了一个var语句,该语句将行转储到一个列表中,并在同一语句中应用where子句

bool IsWet =true ;
var question = ...existing query ...
select new {
...existing output ...,
Wet =q.exch_HideVoiceSignature != null &&  
     q.exch_HideVoiceSignature.Value == 119080001,
Voice = q.exch_HideVoiceSignature == null ||
        (q.exch_HideVoiceSignature != null && 
        q.exch_HideVoiceSignature.Value == 119080000)  ,
}
;

var qq = IsWet ? 
         question.ToList().Where(X=> X.Wet ) : 
         question.ToList().Where(X=> X.Voice );

qq.FirstOrDefault().Dump();

只是因为我有一个包含许多其他连接等的现有查询,并且我想将这个附加参数传递给它,所以我最终使用了一个var语句,该语句将行转储到一个列表中,并在同一语句中应用where子句

bool IsWet =true ;
var question = ...existing query ...
select new {
...existing output ...,
Wet =q.exch_HideVoiceSignature != null &&  
     q.exch_HideVoiceSignature.Value == 119080001,
Voice = q.exch_HideVoiceSignature == null ||
        (q.exch_HideVoiceSignature != null && 
        q.exch_HideVoiceSignature.Value == 119080000)  ,
}
;

var qq = IsWet ? 
         question.ToList().Where(X=> X.Wet ) : 
         question.ToList().Where(X=> X.Voice );

qq.FirstOrDefault().Dump();


@Bvrce您完全正确-这是主要问题,例如,如果我在where子句中只有一个条件,并且这个条件与外部参数相关。在这种情况下,我被迫将所有记录从CRM转储到阵列,然后过滤它们。或者简单地通过调用每个元素的API来循环外部数据。谢谢Andrey。我还可以通过附加到ToList来使用.where语句吗?还有一个问题是,我不想从服务器下载额外的行,因为目标是通过添加IsWet标志来提高性能。非常感谢您的想法。ToList也适用于本地转储数据的任何其他方法。FetchXML查询可能更适合,因为您可以将IsWet标志直接嵌入到筛选条件中。@Bvrce您完全正确-这是一个主要问题,例如,如果我在where子句和此条件中只有一个条件与外部参数相关。在这种情况下,我被迫将所有记录从CRM转储到阵列,然后过滤它们。或者简单地通过调用每个元素的API来循环外部数据。谢谢Andrey。我还可以通过附加到ToList来使用.where语句吗?还有一个问题是,我不想从服务器下载额外的行,因为目标是通过添加IsWet标志来提高性能。非常感谢您的想法。ToList也适用于本地转储数据的任何其他方法FetchXML查询可能更适合,因为您可以将IsWet标志直接嵌入到筛选条件中。请记住,这仅适用于
筛选:非常感谢您的回答。这似乎指向了正确的方向,但问题是where条款是否可以添加到现有的20个其他where条件中?换句话说,这是一个非常复杂的语句的一部分,包含许多其他连接和where子句。我可以将条件where子句添加到现有查询中吗。@SofiaKhwaja-可以,您可以将其添加到现有的
where
子句中。我们只能根据您提供的代码工作,而不是使用20个其他条件的理论查询(具体取决于如何设置)。正如@Daryl正确指出的,它只适用于
&&
——基于您提供的特定代码,这正是您想要的。现在,根据您正在构造的
where
子句的复杂程度,您可以绕过
&&
限制,但这需要一些工作。当我尝试这种方法时,我会收到错误消息“method'where'无法跟随method'Select'或不支持”Step back,如果从原始查询doe中删除
IsWet
条件