我发现自己做了很多查询来获取大集合中的前几个项目,例如,在网站的主页上显示最近的三篇新闻文章或博客文章.
只要此查询仅涉及预定义或自定义部件,我可以执行以下操作:
public IEnumerable<ContentItem> GetTopArticles(int amount)
{
var cultureRecord = _cultureManager.GetCultureByName(_orchardServices.WorkContext.CurrentCulture);
var articles = _orchardServices.ContentManager.Query().ForType("Article")
.Where<LocalizationPartRecord>(lpr => lpr.CultureId == cultureRecord.Id)
.OrderBy<CommonPartRecord>(cpr => cpr.PublishedUtc)
.Slice(0, amount);
return articles;
}
Run Code Online (Sandbox Code Playgroud)
我假设这或多或少与SELECT TOP [amount] ...SQL中的相同,并且在大量记录上具有良好的性能.
但是,有时我使用"迁移"或"导入"从外部源创建内容类型,并希望有条件地检查通用部件中的字段.在这种情况下,我没有可以作为参数传递给ContentQuery方法的Part或PartRecord类,如果我想对任何字段进行条件检查,我现在做这样的事情:
public IEnumerable<ContentItem> GetTopArticles(int amount)
{
var articles = _orchardServices.ContentManager.Query().ForType("Article")
.OrderBy<CommonPartRecord>(cpr => cpr.PublishedUtc)
.List()
.Where(a => a.Content.Article.IsFeatured.Value == true)
.Take(amount);
return articles;
}
Run Code Online (Sandbox Code Playgroud)
这真的很浪费并导致大集合上的大量开销但我真的,真的,真的,不想深入数据库来弄清楚Orchard的内部工作,并在每次我想做这样的事情时构建长而复杂的HQL查询.
下面是一个用Java编写的LSD Radix排序实现,用于对字符串数组进行排序,其中每个字符串都包含完全W字符.
我想计算运行时期间的数组访问次数.我已经读过LSD排序应该要求n * c数组访问,其中n字符串c的数量和每个字符串中的字符数量.但是,下面的算法会多次访问多个数组.如果我在这些中增加一个计数器,我最终会得到一个重要的因素nc.
那么究竟什么构成了算法上下文中的"数组访问"?是否只有一个数组访问实例被认为更重要,我应该在这里计算,或者这个示例实际上是一个低效的实现,它使用了多于必要的数组访问?
public int lsdSort(String[] array, int W) {
int access = 0;
// Sort a[] on leading W characters.
int N = array.length;
String[] aux = new String[N];
for (int d = W-1; d >= 0; d--)
{ // Sort by key-indexed counting on dth char.
int[] count = new int[R+1]; // Compute frequency counts.
for (int i = 0; i < N; i++) { …Run Code Online (Sandbox Code Playgroud) 我创建了一个 PersonPart 并将它附加到我的 Employee 类型。它包含一个名字和一个姓氏,并实现ITitleAspect了当我创建一堆员工时,他们不会在内容列表中都显示为“员工”。现在我想创建一个投影,显示按姓氏字母顺序排列的所有员工。
我怎样才能做到这一点?是否有任何接口,我可以实现,使FirstName和LastName可作为排序标准?
public class PersonPart : ContentPart<PersonPartRecord>, ITitleAspect
{
[Required]
[DisplayName("First name")]
public string FirstName
{
get { return Retrieve(r => r.FirstName); }
set { Store(r => r.FirstName, value); }
}
[Required]
[DisplayName("Last name")]
public string LastName
{
get { return Retrieve(r => r.LastName); }
set { Store(r => r.LastName, value); }
}
public string Title
{
get { return LastName + " " + FirstName; }
}
}
Run Code Online (Sandbox Code Playgroud) 也许这比Orchard问题更像是ASP.NET MVC问题,但是我对这两个问题都比较陌生,在任何情况下我都不知道答案。
从技术上讲,ASP.NET MVC应用程序没有单一入口点,那么我应该在哪里放置我希望每次有人访问任何页面时都始终运行的代码,而不管其层,起源或权限如何?果园有做到这一点的特定方法吗?
如果有所作为,那么我目前正在尝试做的是限制可以访问我的网站的IP范围。我想查看每个传入的请求,并检查用户是否已通过身份验证,或者是否具有我在自定义设置中配置的允许范围内的IP。
我可以想到一些快速而又肮脏的方法来实现此目的,例如将检查Layout并围绕我的所有区域包装一个条件,或者实施IThemeSelector以切换到其他主题,但是我想正确地做到这一点。
关于逃避单引号和双引号有很多问题,但我没有找到解决我的特定问题的答案.
我有一个PHP函数,动态返回一个带有onClick事件的图像,该事件调用一个Javascript函数,其中一个对象的名称作为参数,如下所示:
$response = "<img src=\"images/action_delete.gif\" onClick=\"confirmDelete("'" . $event->getName() . "'")\"/>"";
Run Code Online (Sandbox Code Playgroud)
Javascript函数应该在某个点显示确认对话框,如下所示:
confirm('Delete event ' + name + ' ?')
Run Code Online (Sandbox Code Playgroud)
如何在PHP中格式化$ response以确保当用户输入包含'或'或\'或\"的名称时,Javascript确认不会搞砸?
我像这样覆盖了Zone-AsideSecond模板,为标签添加了一些类:
@{
Model.Id = "zone-aside-second";
var tag = Tag(Model, "section");
tag.Attributes.Add("data-spy", "affix");
tag.Attributes.Add("data-offset-top", "300");
}
@tag.StartElement
@DisplayChildren(Model)
@tag.EndElement
Run Code Online (Sandbox Code Playgroud)
但是现在区域中的小部件不再尊重它们的位置,只是按它们创建的顺序呈现.我尝试像这样修复它:
Model.Items = ((IEnumerable<dynamic>)Model.Items).OrderBy(c => Int32.Parse(c.ContentItem.WidgetPart.Position));
Run Code Online (Sandbox Code Playgroud)
但这似乎并没有什么不同.