编程语言
首页 > 编程语言> > c# – 如何检查是否定义了字段?

c# – 如何检查是否定义了字段?

作者:互联网

this blog中,它显示了如何检索字段的元数据.

我想知道如何检查(除了上面结合try-catch-statement之外)是否存在字段.

原因是当我执行QueryExpression时,我需要知道要在ColumnSet中包含哪些列.

现在的Q& D代码是这样的.

private bool DoesFieldExist(String entityName, String fieldName)
{
  try
  {
    RetrieveAttributeRequest req = new RetrieveAttributeRequest();
    req.EntityLogicalName = entityName;
    req.LogicalName = fieldName;
    RetrieveAttributeResponse resp = (RetrieveAttributeResponse)service.Execute(req);
  }
  catch (Exception) { return false; }
  return true;
}

解决方法:

private bool DoesFieldExist(String entityName, String fieldName)
{
  RetrieveEntityRequest request = new RetrieveEntityRequest
  {
    EntityFilters = Microsoft.Xrm.Sdk.Metadata.EntityFilters.Attributes,
    LogicalName = entityName
  };
  RetrieveEntityResponse response 
    = (RetrieveEntityResponse)service.Execute(request);
  return response.EntityMetadata.Attributes.FirstOrDefault(element 
    => element.LogicalName == fieldName) != null;
}

> EntityFilters要求您使用Microsoft.Xrm.Sdk.Metadata进行添加;如果你不喜欢我的例子中的显式引用(以及你不喜欢它,因为它很难看),以便正常工作.
>我更喜欢使用FirstOrDefault而不是SingleOrDefault.虽然在这种情况下它不会给你任何问题(属性是否存在),在其他情况下,如果有多个元素满足条件,你可能会得到一个异常(如果你在多个属性上寻找匹配或者其他可能导致这种情况的东西).

标签:c,metadata,dynamics-crm-2011
来源: https://codeday.me/bug/20190718/1493981.html