title: Select properties with specific attribute value
body: <p>I'm looking for a way to select properties that have specific custom attributes with particular values in a single LINQ Statement.</p>
  
  <p>I got the properties that have the attribute that I want, but I have no clue how to select its particular value.</p>
  
  <pre><code>&lt;AttributeUsage(AttributeTargets.Property)&gt;
  Public Class PropertyIsMailHeaderParamAttribute
      Inherits System.Attribute
  
      Public Property HeaderAttribute As String = Nothing
      Public Property Type As ParamType = Nothing
  
      Public Sub New()
  
      End Sub
  
      Public Sub New(ByVal headerAttribute As String, ByVal type As ParamType)
          Me.HeaderAttribute = headerAttribute
          Me.Type = type
      End Sub
  
      Public Enum ParamType
          base = 1
          open
          closed
      End Enum
      End Class
  
  
      private MsgData setBaseProperties(MimeMessage mailItem, string fileName)
      {
          var msgData = new MsgData();
          Type type = msgData.GetType();
          var props = from p in this.GetType().GetProperties()
                      let attr = p.GetCustomAttributes(typeof(Business.IT._21c.AddonFW.PropertyIsMailHeaderAttribute), true)
                      where attr.Length == 1
                      select new { Property = p, Attribute = attr.FirstOrDefault() as Business.IT._21c.AddonFW.PropertyIsMailHeaderAttribute };
      }
  </code></pre>
  
  <p>[Solution]</p>
  
  <pre><code>var baseProps = from p in this.GetType().GetProperties()
                  let attr = p.GetCustomAttribute&lt;PropertyIsMailHeaderParamAttribute&gt;()
                  where attr != null &amp;&amp; attr.Type == PropertyIsMailHeaderParamAttribute.ParamType.@base
  select new { Property = p, Attribute = attr as Business.IT._21c.AddonFW.PropertyIsMailHeaderParamAttribute };
  </code></pre>