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
Linq 检查隐式类型变量是否包含特定值_Linq_Var - Fatal编程技术网

Linq 检查隐式类型变量是否包含特定值

Linq 检查隐式类型变量是否包含特定值,linq,var,Linq,Var,我有一个隐式变量,它获取一个包含SQL查询(LINQ)结果的列表。 此集合表示以前选定的列表的现有客户端 通过一个存储过程,我获取一组新的客户机,这些客户机将用于填充下拉列表。迭代这组数据时,如果已经包含在现有条目列表中,我将排除这些记录 如何使用隐式类型的变量进行此检查 var existingClients = (from doc in TBL_Documents join c in TBL_CONTACT on doc.CONTACTID eq

我有一个隐式变量,它获取一个包含SQL查询(LINQ)结果的列表。 此集合表示以前选定的列表的现有客户端
通过一个存储过程,我获取一组新的客户机,这些客户机将用于填充下拉列表。迭代这组数据时,如果已经包含在现有条目列表中,我将排除这些记录

如何使用隐式类型的变量进行此检查

var existingClients = (from doc in TBL_Documents
                       join c in TBL_CONTACT on doc.CONTACTID equals c.CONTACTID
                       where doc.DOCID.Equals(DocID)
                       select new { c.CONTACTID, c.FULLNAME }).ToList();


 var resultSet = sp_ActiveContacts(index).ToList();
 foreach (var record in resultSet)
 {
   //How could I achieve something like this if condition (like a List)?
   if (!existingClients.Contains(record.CONTACTID))            
   {                                
      optionTags += "<option value=" + record.CONTACTID + ">" + record.Name + "</option>";
   }                       
 }
var existingClients=(来自TBL\U文档中的文档
在文档上的TBL_联系人中加入c。CONTACTID等于c.CONTACTID
其中doc.DOCID.Equals(DOCID)
选择new{c.CONTACTID,c.FULLNAME}).ToList();
var resultSet=sp_ActiveContacts(index.ToList();
foreach(结果集中的var记录)
{
//如果条件满足(如列表),我如何实现这样的目标?
如果(!existingClients.Contains(record.CONTACTID))
{                                
optionTags+=“”+记录名称+“”;
}                       
}

如果可能,我希望创建一个临时列表来存储用于If条件的CONTACTID。

匿名类型通过检查每个属性来测试是否相等,因此您可以执行以下操作:

if (!existingClients.Contains(new { record.CONTACTID, record.FULLNAME }))
(假设您的
记录
变量具有
全名
属性。否则,只需使用适当的值构造匿名对象即可。)

有关更多信息,请参阅

编辑

更简单的可能是:

if (!existingClients.Any(c => c.CONTACTID == result.CONTACTID))

谢谢马特的回答!就性能而言,您的建议与使用临时列表存储ID并检查此列表之间有什么区别

...
List<Guid> existIDs = new List<Guid>();
foreach (var c in existingContacts)
{
  existIDs.Add(c.CONTACTID);
}

var resultSet = db.sp_PagingActiveContacts(idx, userLogin, range).ToList();
foreach (var record in resultSet)
{
if (!existIDs.Contains(new {record.CONTACTID}))
{  ....
。。。
List existIDs=新列表();
foreach(现有触点中的var c)
{
existIDs.Add(c.CONTACTID);
}
var resultSet=db.sp_PagingActiveContacts(idx,userLogin,range.ToList();
foreach(结果集中的var记录)
{
如果(!existIDs.Contains(new{record.CONTACTID}))
{  ....

我认为这样做不会带来任何好处。.Any()调用几乎同样快,而且IMHO更具可读性。这肯定更具可读性。并且不需要创建与记录变量相关的其他值(在您的示例中)。