Tag: 索引

如何将LINQ分区为对象查询?

这是资源分配问题。 我的目标是运行查询以获取任何时隙的最高优先级class次。 数据集非常大。 对于这个例子,假设1000家公司各有100个class次(尽管真实数据集更大)。 它们都被加载到内存中,我需要对它们运行一个LINQ to Objects查询: var topShifts = (from s in shifts where (from s2 in shifts where s2.CompanyId == s.CompanyId && s.TimeSlot == s2.TimeSlot orderby s2.Priority select s2).First().Equals(s) select s).ToList(); 问题在于,如果没有优化,LINQ to Objects将比较两个集合中的每个对象,进行所有1,000 x 100与1,000 x 100的交叉连接,这相当于100亿(10,000,000,000)个比较。 我想要的是只比较每个公司内的对象(就像公司在SQL表中被索引一样)。 这将产生1000组100×100个对象,总计1000万(10,000,000)个比较。 随着公司数量的增长,后者将线性扩展而不是指数级扩展。 像I4o这样的技术可以让我做这样的事情,但不幸的是,我没有在我正在执行这个查询的环境中使用自定义集合的奢侈。 此外,我只希望在任何给定的数据集上运行此查询一次,因此持久索引的值是有限的。 我希望使用一种扩展方法,它可以按公司对数据进行分组,然后在每个组上运行表达式。 完整示例代码: public struct Shift { public static long Iterations; […]

如何在数组.NET驱动程序中的项的属性上创建MongoDB MultiKey索引

我有一个包含项目的MongoDB集合“foos”,每个项目都有一个“bars”数组。 也就是说,“foo”具有以下架构: { “id”: UUID “name”: string … “bars”: [ “id”: UUID “key”: string … ] } 我需要使用MongoDB C#.NET Mongo驱动程序在name和bar.key上创建索引。 我假设我可以使用Linq Select函数执行此操作,如下所示: Indexes.Add(Context.Collection().Indexes.CreateOne( Builders.IndexKeys .Descending(x => x.Bars.Select(y => y.Key)))); 但是,这会导致InvalidOperationException: System.InvalidOperationException:’无法确定x => x.Bars.Select(y => y.Id)的序列化信息。 关于MultiKey索引的Mongo文档显示了如何使用简单的点表示法创建这样的索引,即 db.foos.createIndex( { “name”: 1, “bars.key”: 1 } ) 但是,MongoDB驱动程序文档似乎表明我正在使用Linq函数是正确的。 如何使用MongoDB .NET驱动程序在我的集合上创建多键索引,最好使用Linq函数?

在不牺牲索引使用的情况下,在SQLite LIKE中转义通配符(%,_)?

我对SQLite查询有几个问题。 实际上我开始认为SQLite不是为超过10行的表设计的,实际上,SQLite是一场噩梦。 以下查询 SELECT * FROM [Table] WHERE [Name] LIKE ‘Text%’ 它工作正常。 EXPLAIN显示使用索引并在大约70ms后返回结果。 现在我需要从.NET SQLite驱动程序运行此查询,所以我正在更改查询 SELECT * FROM [Table] WHERE [Name] LIKE @Pattern || ‘%’ 索引未使用。 当我在任何SQLite工具中运行以下查询时,也不使用索引 SELECT * FROM [Table] WHERE [Name] LIKE ‘Text’ || ‘%’ 所以我猜SQLite没有实现任何类型的预处理逻辑。 好。 让我们试着解决它,我仍然绑定变量并执行以下操作 SELECT * FROM [Table] WHERE [Name] LIKE @Pattern 但现在我将%通配符附加到我的模式字符串的末尾,就像这样 command.Parameters.Add(new SQLiteParameter(“@Pattern”, pattern + ‘%’)); 它工作得很慢。 […]

C#/。NET Server默认/索引页面的路径

在我试图进一步certificate项目未来的过程中,我试图找到使用C#检索Web目录中索引/默认页面的完整路径和文件名的最佳方法,而不知道Web服务器的文件名列表可能性。 ‘Server.MapPath(“/ test /”)’给我’C:\ www \ test \’ ……所以:’Server.MapPath(Page.ResolveUrl(“/ test /”))’ …但我需要’C:\ www \ test \ index.html’。 有没有人知道现有的检索文件名的方法,当有人浏览到该目录时,网络服务器将提供该文件名 – 无论是default.aspx,还是index.html,还是其他什么? 感谢任何帮助,饲料

有没有办法创建或更新MongoDB索引?

根据createIndexes命令的文档: 如果使用一组选项创建索引,然后使用相同的索引字段但不同的选项发出createIndexes,MongoDB将不会更改选项也不会重建索引。 解决方案是删除索引并从头开始创建它,但这样做成本很高。 有没有办法在没有索引的情况下创建索引,如果索引具有相同的选项则不执行任何操作,如果选项已更改则替换索引? 这个问题最初是由Phil Barresi 在这里提出的,但后来被删除了。

如何在Sitecore中配置Lucene以仅索引主数据库上项目的最新版本?

我认识到这是web数据库上的一个有争议的问题,所以这个问题适用于主数据库… 我在Sitecore 6.4.1中设置了自定义索引,如下所示: $(id) _search_content_US master /sitecore/content/usa home home content 我像这样查询索引(我从这个答案中使用了techphoria414的SortableIndexSearchContext : 如何使用新的Sitecore.Search API进行排序/过滤 ): private SearchHits GetSearchResults(SortableIndexSearchContext searchContext, string searchTerm) { CombinedQuery query = new CombinedQuery(); query.Add(new FullTextQuery(searchTerm), QueryOccurance.Must); return searchContext.Search(query, Sort.RELEVANCE); } … SearchHits hits = GetSearchResults(searchContext, searchTerm); hits是我索引中搜索命中的集合。 当我遍历hits我可以看到Sitecore中有相同项目的许多重复项,每个版本的项目有1个。 然后,我执行以下操作以获取SearchResultCollection : SearchResultCollection results = hits.FetchResults(0, hits.Length); 这将所有重复项组合到一个SearchResult对象中。 此对象表示特定项的1个版本,并且具有名为SubResults的属性,该属性是SearchResult的集合,表示所有其他项目版本。 这是我的问题: SearchResult表示的项目版本不是该项目的当前发布版本! 它似乎是一个随机选择的版本(无论搜索方法在索引中首先命中)。 但是,最新版本包含在SubResults集合中。 […]

WPF绑定如何区分索引器属性和列表元素?

我有一个绑定的forms: Path=SpecialCollection[0] SpecialCollection类扩展了ObservableCollection并具有索引器属性。 public T this[string propertyValue] { get { // do stuff return default(T); } } 我的问题是绑定尝试获取索引器属性值,而不是返回集合中的第0项。 有没有办法强制绑定将0视为一个整数,所以它返回一个集合元素,而不是调用集合的索引器属性的getter?

获取ListView中选择的Item的索引

我已经搜索了大约一个小时,但找不到最佳解决方案。 我正在从VB.NET迁移到C#Forms和C#WPF。 没关系……所以我将此代码用于C#表单并且它可以工作,但不能在C#WPF中使用 if (ListView1.SelectedItems.Count > 0) { for (lcount = 0; lcount <= ListView1.Items.Count – 1; lcount++) { if (ListView1.Items[lcount].Selected == true) { var2 = lcount; break; } } } 这是我想要获取列表框中单击项目的索引的方式。 我在.SELECTED中有错误 请帮忙。

选择使用索引排序故障

实际上我正在处理CodeAbbey问题,所以我不想回答代码,而是对此进行阐述,我做错了什么。 http://www.codeabbey.com/index/task_view/selection-sort 我的选择排序实际上没有任何问题,但我不知道为什么我没有得到适当的索引(当排序工作!)。 即输入数据: 5 1 3 6 2 4 7 9 8 0我把它分类为0 1 2 3 4 5 6 7 8 9 ,正如我所希望的那样。 这是代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SelectionSort { class Program { static void Main(string[] args) { int howMany = int.Parse(Console.ReadLine()); //length of array List Base […]

字符在字符串中当前位置左侧的位置

从字符串中的某个任意位置,我需要找到一个字符在我位置左侧的最近位置。 如果我想要向右执行此操作,我可以使用.IndexOf,但如何在左侧执行此操作我不确定。 我提出的两种方法只是从我的位置开始的递减循环,或者使用正常的字符串反向放置字符串.IndexOf 还有其他人有更好的方法来实现这个目标吗?