我有产品
(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产品的索引?
答案 0 :(得分:0)
我不确定您要使用索引的内容,我认为DBSet<TEntity>
上确实存在索引概念。
您可以使用Local
从DBSet
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语句之前,请务必枚举查询。您的编译器不会抱怨,但是您在运行时会遇到异常