SQL IN äquivalent in CAML
Ist es eine "nette" Art und Weise zu erstellen, die eine CAML-Abfrage für SharePoint, die soetwas macht?
SELECT *
FROM table
WHERE Id IN (3, 12, ...)
Oder bin ich stecken mit einem Alptraum von verschachtelten <Or>
Knoten?
EDIT: Das war meine Lösung zu generieren, die <Or>
Knoten.
/// Simulates a SQL 'Where In' clause in CAML
/// </summary>
/// <param name="columnType">Specifies the data type for the value contained by the field.</param>
/// <returns>Nested 'Or' elements portion of CAML query</returns>
public static string CamlIn<T>(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);
}
Verwendung:
int[] ids = new int[] { 1, 2, 4, 5 };
string query = string.Format("<Where>{0}</Where>", CamlIn("SomeColumn", "Number", ids));
Ausgabe:
<Where>
<Or>
<Or>
<Or>
<Eq>
<FieldRef Name=\"SomeColumn\" />
<Value Type=\"Number\">5</Value>
</Eq>
<Eq>
<FieldRef Name=\"SomeColumn\" />
<Value Type=\"Number\">4</Value>
</Eq>
</Or>
<Eq>
<FieldRef Name=\"SomeColumn\" />
<Value Type=\"Number\">2</Value>
</Eq>
</Or>
<Eq>
<FieldRef Name=\"SomeColumn\" />
<Value Type=\"Number\">1</Value>
</Eq>
</Or>
</Where>
Auch diese überlastung für das arbeiten mit Lookup-Felder, die ein bisschen einfacher
/// <summary>
/// Simulates a SQL 'Where In' clause in CAML
/// </summary>
/// <param name="lookupId">Specify whether to use the Lookup column's Id or Value.</param>
///<returns>Nested 'Or' elements portion of CAML query</returns>
public static string CamlIn<T>(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);
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
NEIN, Sie benötigen, um mit verschachtelten
OR
- tags; diese sind unterstützt Abfrage-Anweisungen auf CAMLVielleicht CAML.NET kann Ihnen bei Ihrer Suche helfen.
Für diejenigen, die Sharepoint 2010 verwenden, gibt es ein element zur Verfügung:
http://msdn.microsoft.com/en-us/library/ff625761.aspx
Hier ist ein funktionierendes Beispiel:
FullTextSqlQuery
Ist es möglich, die Suche MOOS mithilfe von SQL-Anweisungen, mit dem FullTextSqlQuery Klasse. Ich habe keine Erfahrung mit dieser Klasse persönlich. Diese Artikel können sein:
YACAMLQT
Alternativ gibt es auch YACAMLQT (Noch eine CAML-Abfrage-Tool), die ermöglicht Ihnen das erstellen von SharePoint-CAML-Abfragen mit Hilfe von T-SQL-syntax.
LINQ to SharePoint
Wenn Sie bis zu Geschwindigkeit, mit LINQ, dann die LINQ to SharePoint-Projekt bietet ein tool zum Abfragen von SharePoint-Listen mithilfe der LINQ-syntax. Bitte beachten Sie, dieses tool ist noch in der alpha-Testphase, also kann es nicht sein, die Produktion bereit.
U2U CAML Query Builder
Wenn Sie CAML-Abfragen, ich würde empfehlen, mit der U2U CAML Query Builder for SharePoint (2003 und 2007) - tool zum Aufbau Ihrer CAML-Abfragen. Das tool ermöglicht es Ihnen, bauen Sie Ihre query-string, und um ihn auszuführen, gegen die Ziel-Liste, mit einem point-and-click-interface, wie unten gezeigt.
(Quelle: u2u.net)
Der vier oben genannten Methoden, kann ich nur empfehlen, der U2U CAML Query Builder, da Sie fast täglich in den letzten 6 Monaten. Es scheint auch so zu sein, das am häufigsten verwendet CAML-tool in der SharePoint-community .
Beachten Sie, wenn Sie CAML-Abfragen im code, dann empfehle ich Ihnen, werfen Sie einen Blick auf die CAML.NET Projekt auf CodePlex, die bietet "eine Reihe von .NET-Sprache-basierte tools für die Erstellung von dynamischen, wiederverwendbaren CAML-query-Komponenten".
<Or>
s.Stand ich vor einer ähnlichen Sache und hatte letztlich zum erstellen eines rekursiven Algorithmus zu generieren, die geschachtelt ODER die Struktur. Hier ist mein Algorithmus
Dieser generiert die XML-caml-Abfrage, die als