使用实体框架查找索引

时间:2013-08-09 18:56:23

标签: entity-framework indexing

我有产品

(index0) - 名称=计算机,Id = 1

(index1) - 名称=鼠标,Id = 2

(index2) - 名称=键盘,Id = 3

(index3) - 名称=笔记本电脑,Id = 4

例如,

var result = context.Products.where(s=>s.Id==3).firstordefault();

如何通过在c#中使用实体框架找到Id = 3产品的索引?

2 个答案:

答案 0 :(得分:0)

我不确定您要使用索引的内容,我认为DBSet<TEntity>上确实存在索引概念。

您可以使用LocalDBSet FindIndex获取 context.Products.Local.IndexOf(...) 属性的索引:

Id

但我确信无论你想做什么都有更好的方法。

另外,如果您知道对象的ID,则假设Find是对象的主键,则应该使用var result = context.Products.Find(Id); // Id = 3. 来获取您的实体:

{{1}}

答案 1 :(得分:0)

你没有提到你的(索引..)项目的类型,但我们假设它是一个int。实际上它可以是任何类型。

你的(索引..)项是主键,让我们假设它们属于属性索引:

您的产品类就像:

class Product
{
    [Key]
    public int Index {get; set;}

    public string Name {get; set;}
    public int Id {get; set;}

    // etc.
 }

你的DbContext就像:

public class MyDbContext : DbContext
{
    public DbSet<Product> Products {get; set;}
    ...
}

要获取Id == 3的所有产品,并获取这些产品的指数:

using (var dbContext = new MyDbContext(...))
{
   var productsWithId3 = dbContext.Products
       .Where(product => product.Id == 3);
   var indicesOfProductsWithId3 = productsWithId3
       .Select(product => product.Index);
   // of course this can be done in one step

   // the query is not executed until you start enumerating
   foreach (var index in indicesOfProductsWithId3)
   {
       Console.WriteLine(index.ToString());
    }     
}

在结束using语句之前,请务必枚举查询。您的编译器不会抱怨,但是您在运行时会遇到异常