public void RecordSearchCommand(string term, Action<EntityCollection> callback)
{
if (_queryParser==null)
{
// Get the quick find metadata on first search
_queryParser = new QueryParser(connectToTypes);
_queryParser.GetQuickFinds();
_queryParser.QueryMetadata();
}
// Get the option set values
int resultsBack = 0;
List<Entity> mergedEntities = new List<Entity>();
Action<EntityCollection> result = delegate(EntityCollection fetchResult)
{
resultsBack++;
FetchQuerySettings config = _queryParser.EntityLookup[fetchResult.EntityName].QuickFindQuery;
// Add in the display Columns
foreach (Dictionary<string,object> row in fetchResult.Entities)
{
Entity entityRow = (Entity)(object)row;
int columnCount = config.Columns.Count<3 ? config.Columns.Count :3;
// Only get up to 3 columns
for (int i = 0; i < columnCount; i++)
{
// We use col<n> as the alias name so that we can show the correct values irrespective of the entity type
string aliasName = "col" + i.ToString();
row[aliasName] = row[config.Columns[i].Field];
if (entityRow.FormattedValues.ContainsKey(config.Columns[i].Field + "name")) {
entityRow.FormattedValues[aliasName + "name"] = entityRow.FormattedValues[config.Columns[i].Field + "name"];
} else {
entityRow.FormattedValues[aliasName] = entityRow.GetAttributeValue(config.Columns[i].Field) as string;
}
}
}
// Merge in the results
mergedEntities.AddRange((Entity[])(object)fetchResult.Entities.Items());
mergedEntities.Sort(delegate (Entity x, Entity y){
return string.Compare(x.GetAttributeValueString("name"), y.GetAttributeValueString("name"));
});
if (resultsBack == connectToTypes.Length)
{
EntityCollection results = new EntityCollection(mergedEntities);
callback(results);
}
};
foreach (string entity in connectToTypes)
{
SearchRecords(term, result, entity);
}
}