How to query Images by checking the Tag using FluentAPI
Hi,
I have the following Linq query to gets images in an image library called "MyImages". I have Tagged the images in the library with certain keywords. How can I extend the below query to check the Tag field also?
Let's say i need to find images which are Tagged as "2011"
App.WorkWith() .Album("MyImages") .Images() .Where(i.Status == ContentLifecycleStatus.Live) .Get();Hi Duneel,
Please take a look at this post.
Kind regards,
Ivan Dimitrov
the Telerik team
Hi Ivan,
There is no property called ".TagsText" in my Image item where I can check. How should I do that?
Thanks,
Duneel
Hello Duneel,
The exact post I sent you there is no TagsText.
Posted on Feb 1, 2011 (permalink)
Hello Dan,ContentItems()Hi Ivan,
This takes the GUID of the tag. But I want to check against the exact Tag text. How shall I do that?
Thanks,
Duneel
Hi Ivan,
another issue. I'm receiving following exception when running the below query. Any idea why? The albem title is specified by a field called ImageLibraryName in my Widget and it contains the correct value.
Query:
Album albumToLocate = App.WorkWith() .Albums() .Where(a => a.Title == this.ImageLibraryName) .Get().FirstOrDefault();Telerik.OpenAccess.Exceptions.QueryException was unhandled by user code Message=line 1:132: unexpected token: ["",<1>,line=1,col=132] Original Query: DEFINE EXTENT extnt FOR Telerik.Sitefinity.Libraries.Model.Album; SELECT * FROM extnt AS t1 WHERE t1.appName = $1 AND t1.Title_ = Source=Telerik.Sitefinity CanRetry=true StackTrace: at Telerik.Sitefinity.Data.Linq.Oql.OqlQueryProvider`2.ExecuteKnownType[TResult](IObjectScope scope, String queryText, Boolean isEnumerable, Int32 skip, Int32 take, IList parameters, ElementOperator op) at Telerik.Sitefinity.Data.Linq.Oql.OqlQueryProvider`2.Execute[TResult](Expression expression) at Telerik.Sitefinity.Data.Linq.QueryProvider`2.System.Linq.IQueryProvider.Execute[T](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source) at PlayerOfTheWeekDetails.Page_Load(Object sender, EventArgs e) in c:\TFS_Working\NHLPA\www.nhlpa.com_4.0\www.nhlpa.com_4.0\App_Data\CustomControls\PlayerOfTheWeekDetails.ascx.cs:line 54 at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) at System.Web.UI.Control.OnLoad(EventArgs e) at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Control.LoadRecursive() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) InnerException:Hi Duneel,
You could use this code to filter on tags:
/// <summary> /// Bind data to repeater /// </summary> private void BindData() try // Create a TaxonomyManager TaxonomyManager taxonomyManager = TaxonomyManager.GetManager(); // Get the tag called 'Visual' var taxon = taxonomyManager.GetTaxa<FlatTaxon>().Where(t => t.Name == "Visual").Single(); string itemTypeName = "Telerik.Sitefinity.Libraries.Model.Image"; Type itemType = Telerik.Sitefinity.Utilities.TypeConverters.TypeResolutionService.ResolveType(itemTypeName); var manager = Telerik.Sitefinity.Data.ManagerBase.GetMappedManager(itemType, ""); ContentDataProviderBase contentProvider = manager.Provider as ContentDataProviderBase; IEnumerable items = GetItems(taxon, contentProvider, itemType); this.rptRotator.DataSource = items; this.rptRotator.DataBind(); catch (Exception ex) throw ex; /// <summary> /// Get PropertyDescriptor /// </summary> /// <param name="itemType"></param> /// <param name="taxon"></param> /// <returns></returns> private TaxonomyPropertyDescriptor GetPropertyDescriptor(Type itemType, ITaxon taxon) return TaxonomyManager.GetPropertyDescriptor(itemType, taxon); /// <summary> /// Get Items based on taxon /// </summary> /// <param name="taxon"></param> /// <param name="contentProvider"></param> /// <param name="itemType"></param> /// <returns></returns> private IEnumerable GetItems(ITaxon taxon, ContentDataProviderBase contentProvider, Type itemType) TaxonomyPropertyDescriptor prop = GetPropertyDescriptor(itemType, taxon); int? totalCount = 0; var filter = "Status = Master"; var items = contentProvider.GetItemsByTaxon(taxon.Id, prop.MetaField.IsSingleTaxon, prop.Name, itemType, filter, string.Empty, 0, 100, ref totalCount); return items;