SQL IN эквивалент в CAML

Есть ли "отлично" способ создать запрос CAML для SharePoint, который делает что-то вроде этого?

SELECT *
FROM table
WHERE Id IN (3, 12, ...)

Или я застрял с кошмаром вложенных узлы?

РЕДАКТИРОВАТЬ: Это было мое решение для создания узлы.

/// Simulates a SQL 'Where In' clause in CAML
/// 
/// Specifies the data type for the value contained by the field.
/// Nested 'Or' elements portion of CAML query
public static string CamlIn(string internalFieldName, string columnType, T[] values)
{
    XDocument doc = new XDocument();
    XElement prev = null;
    int index = 0;

    while (index < values.Length)
    {
        XElement element =
            new XElement("Or",
                new XElement("Eq",
                    new XElement("FieldRef",
                    new XAttribute("Name", internalFieldName)),
                new XElement("Value",
                    new XAttribute("Type", columnType),
                    values[index++].ToString())));

        if (index == values.Length - 1)
        {
            element.AddFirst(
                new XElement("Eq",
                    new XElement("FieldRef",
                    new XAttribute("Name", internalFieldName)),
                new XElement("Value",
                    new XAttribute("Type", columnType),
                    values[index++].ToString())));
        }

        if (prev != null)
            prev.AddFirst(element);
        else
            doc.Add(element);

        prev = element;
    }

    return doc.ToString(SaveOptions.DisableFormatting);
}

Использование:

int[] ids = new int[] { 1, 2, 4, 5 };
string query = string.Format("{0}", CamlIn("SomeColumn", "Number", ids));

Выход:


    
        
            
                
                    
                    5
                
                
                    
                    4
                
            
            
                
                2
            
        
        
            
            1
        
    

Также немного упростила эту перегрузку для работы с полями поиска.

/// 
/// Simulates a SQL 'Where In' clause in CAML
/// 
/// Specify whether to use the Lookup column's Id or Value.
/// Nested 'Or' elements portion of CAML query
public static string CamlIn(string internalFieldName, bool lookupId, T[] values)
{
    XDocument doc = new XDocument();
    XElement prev = null;
    int index = 0;

    while (index < values.Length)
    {
        XElement element =
            new XElement("Or",
                new XElement("Eq",
                    new XElement("FieldRef",
                        new XAttribute("Name", internalFieldName),
                        lookupId ? new XAttribute("LookupId", "TRUE") : null),
                    new XElement("Value",
                        new XAttribute("Type", "Lookup"),
                        values[index++].ToString())));

        if (index == values.Length - 1)
        {
            element.AddFirst(
                new XElement("Eq",
                    new XElement("FieldRef",
                        new XAttribute("Name", internalFieldName),
                        lookupId ? new XAttribute("LookupId", "TRUE") : null),
                    new XElement("Value",
                        new XAttribute("Type", "Lookup"),
                        values[index++].ToString())));
        }

        if (prev != null)
            prev.AddFirst(element);
        else
            doc.Add(element);

        prev = element;
    }

    if (values.Length == 1)
    {
        XElement newRoot = doc.Descendants("Eq").Single();
        doc.RemoveNodes();
        doc.Add(newRoot);
    }

    return doc.ToString(SaveOptions.DisableFormatting);
}

Ответы на вопрос(3)

Ваш ответ на вопрос