C# 多字段索引对象数组

C# 多字段索引对象数组,c#,linq-to-objects,in-memory-database,C#,Linq To Objects,In Memory Database,我有10万用户 查询:获取名为“Rafael”且年龄在40到50岁之间的用户 按Linq2Objects:users.Where(p=>p.Name==“Rafael”&&p.Age>=40&&p.Age如果数据未准备好,则在未进行完整数据集扫描的情况下无法获得所需的结果。 在时间不关键时提前准备数据,在需要较短响应时间时处理已排序的数据 在数据库世界中有一个类似的例子 有一个包含100K条记录的表。有人想使用“where”子句运行Select查询,该子句通过非主键筛选数据。除非实现索引,否则

我有10万用户

查询:获取名为“Rafael”且年龄在40到50岁之间的用户


  • 按Linq2Objects:users.Where(p=>p.Name==“Rafael”&&p.Age>=40&&p.Age如果数据未准备好,则在未进行完整数据集扫描的情况下无法获得所需的结果。 在时间不关键时提前准备数据,在需要较短响应时间时处理已排序的数据

    在数据库世界中有一个类似的例子

    有一个包含100K条记录的表。有人想使用“where”子句运行Select查询,该子句通过非主键筛选数据。除非实现索引,否则在执行计划中执行“表扫描”操作总是很慢

    使用以下内容实现索引的代码示例:

    //未排序的用户数组-原始数据
    用户[]原始用户;
    //提前准备数据(创建一个索引)。
    //具有最佳分布的字段应用作键
    ILookup preparedUsers=originalUsers.ToLookup(u=>u.Name,u=>u);
    //需要子集时运行此代码
    //按键搜索由.NET类优化
    //“where”子句适用于小数据集
    
    preparedUsers[“Rafael”]。其中(p=>p.Age>=40&&p.Age如果您的数据未准备好,没有完整的数据集扫描,您将无法获得想要的结果。 在时间不关键时提前准备数据,在需要较短响应时间时处理已排序的数据

    在数据库世界中有一个类似的例子

    有一个包含100K条记录的表。有人想使用“where”子句运行Select查询,该子句通过非主键筛选数据。除非实现索引,否则在执行计划中执行“表扫描”操作总是很慢

    使用以下内容实现索引的代码示例:

    //未排序的用户数组-原始数据
    用户[]原始用户;
    //提前准备数据(创建一个索引)。
    //具有最佳分布的字段应用作键
    ILookup preparedUsers=originalUsers.ToLookup(u=>u.Name,u=>u);
    //需要子集时运行此代码
    //按键搜索由.NET类优化
    //“where”子句适用于小数据集
    
    preparedUsers[“Rafael”]。其中(p=>p.Age>=40&&p.AgeBy线程安全,您的意思是当您从集合中查询时,会有其他进程写入到集合中吗?不,抱歉。只读线程安全。我已更新了问题。但是否有任何代码框架使其透明。-是的。它是RDBMS:)通过线程安全进行检查,您的意思是当您从集合中查询时,会有其他进程写入到集合中吗?不,抱歉。只读线程安全。我已经更新了问题。但是否有任何代码框架使其透明。-是的。这是RDBMS:)请检查
    public class User
    {
       public int Id { get; set; }
       public int Age { get; set; }
       public string Name { get; set; }
    }
    
    public  class   FastArray<T> 
    
    //not sorted array of users - raw data
    User[] originalUsers;
    //Prepare data in advance (create one index). 
    //Field with the best distribution should be used as key
    ILookup<string, User> preparedUsers = originalUsers.ToLookup(u => u.Name, u => u);
    
    
    //run this code when you need subset 
    //search by key is optimized by .NET class 
    //"where" clause works with small set of data
    preparedUsers["Rafael"].Where(p=> p.Age>=40 && p.Age<=50).ToArray();