private static string CheckLockedItemsSnippet(LockItemsExceptPropertiesInfo info)
        {
            return string.Format(
            @"            if (updated.Length > 0 || deleted.Length > 0)
            {{
                {0}[] changedItems = updated.Zip(updatedNew, (i, j) => (false{4})
                    ? i : null).Where(x => x != null).Concat(deleted).ToArray();

                if (changedItems != null && changedItems.Length > 0)
                {{
                    var lockedItems = _domRepository.{0}.Filter(changedItems.AsQueryable(), new {1}());
                    if (lockedItems.Count() > 0)
                        throw new Rhetos.UserException({2}, ""DataStructure:{0},ID:"" + lockedItems.First().ID.ToString(){3});

                    // Workaround to restore NH proxies if NHSession.Clear() is called inside filter.
                    for (int i=0; i<updated.Length; i++) updated[i] = _executionContext.NHibernateSession.Load<{0}>(updated[i].ID);
                    for (int i=0; i<deleted.Length; i++) deleted[i] = _executionContext.NHibernateSession.Load<{0}>(deleted[i].ID);
                }}
            }}
            ",
                info.Source.GetKeyProperties(),
                info.FilterType,
                CsUtility.QuotedString(info.Title),
                ClientMessageTag.Evaluate(info),
                ComparePropertyTag.Evaluate(info));
        }
        private static string CheckLockedItemsSnippet(LockItemsExceptPropertiesInfo info)
        {
            return string.Format(
@"            if (updatedNew.Count() > 0 || deletedIds.Count() > 0)
            {{
                {0}[] changedItems = updated.Zip(updatedNew, (i, j) => (false{4})
                    ? i : null).Where(x => x != null).Concat(deleted).ToArray();

                if (changedItems != null && changedItems.Length > 0)
                {{
                    var lockedItems = _domRepository.{0}.Filter(this.Query(changedItems.Select(item => item.ID)), new {1}());
                    if (lockedItems.Count() > 0)
                        throw new Rhetos.UserException({2}, ""DataStructure:{0},ID:"" + lockedItems.First().ID.ToString(){3});
                }}
            }}
",
                info.Source.GetKeyProperties(),
                info.FilterType,
                CsUtility.QuotedString(info.Title),
                ClientMessageTag.Evaluate(info),
                ComparePropertyTag.Evaluate(info));
        }
        private static string CheckLockedItemsSnippet(LockItemsExceptPropertiesInfo info)
        {
            return(string.Format(
                       @"if (updatedNew.Count() > 0 || deletedIds.Count() > 0)
            {{
                {0}[] changedItems = updated.Zip(updatedNew, (i, j) => (false{4})
                    ? i : null).Where(x => x != null).Concat(deleted).ToArray();

                if (changedItems != null && changedItems.Length > 0)
                {{
                    var lockedItems = _domRepository.{0}.Filter(this.Query(changedItems.Select(item => item.ID)), new {1}());
                    if (lockedItems.Count() > 0)
                        throw new Rhetos.UserException({2}, ""DataStructure:{0},ID:"" + lockedItems.First().ID.ToString(){3});
                }}
            }}
            ",
                       info.Source.GetKeyProperties(),
                       info.FilterType,
                       CsUtility.QuotedString(info.Title),
                       ClientMessageTag.Evaluate(info),
                       ComparePropertyTag.Evaluate(info)));
        }