在linq查询中使用Contains与另一个查询的结果时出错

时间:2012-06-18 22:44:47

标签: c# linq

在第一个查询中,我查询ID的步骤列表。在下一个查询中,我检查该查询是否包含来自新Query和C_S_Is_Button的ID。但是我在下面得到了这个错误。我在这个网站上看到过类似的问题,但我还没弄明白如何在我的问题中实现解决方案。

错误:

  

方法的类型参数   “System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable,   TSource)'无法从使用中推断出来。尝试指定类型   明确的论点。

第一次查询

var QcheckA = from csd in l.LCSDatas
                join cls in l.LCSteps on csd.C_S_ID equals cls.C_S_ID
                join cde in lol.LCDefinitions on csd.C_S_ID equals cde.C_S_ID
                where csd.A_ID == _AID && cde.C_ID == data.C_ID
                select new 
                {
                    csd.C_S_ID
                };     

C步骤。找到未点击按钮的最低步骤。

var QSID = (from cd in l.LCDefinitions
               join cs in l.LCSteps on cd.C_S_ID equals cs.C_S_ID                           
               where cs.C_S_Is_Button == true
                  && cd.C_ID == data.C_ID                              
                  && !QcheckA.Contains(cd.C_S_ID) //Error Here
               orderby cd.C_S_Order ascending
               select new
               {
                   cd.C_S_ID
               }).Take(1);

var SID = QSID.SingleOrDefault();

有关这种情况的任何建议吗?感谢

1 个答案:

答案 0 :(得分:2)

您正在第一个查询中创建匿名类型,然后在第二个查询中,您尝试将匿名类类型与基本类型(如intGuid)进行比较。

在您的第一个查询中尝试更明确(将其强制转换为确切类型,我假设int但您可能正在使用Guid):

select new  
{ 
    ID = (int)csd.C_S_ID 
};     

然后,在第二个查询中,创建另一个匿名类型,就像第一个明确表示它包含的属性类型一样:

&& !QcheckA.Contains(new { ID = (int)cd.C_S_ID} )