Найти индекс, используя структуру сущности

105
7

У меня есть продукты

(index0) - Name = Computer, Id = 1

(index1) - Имя = Мышь, Id = 2

(index2) - Name = Keyboard, Id = 3

(index3) - Имя = Ноутбук, Id = 4

как, например,

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

Как можно найти индекс продукта Id = 3, используя инфраструктуру сущности в С#?

спросил(а) 2021-01-19T13:15:11+03:00 2 месяца, 3 недели назад
1
Решение
76

Вы не указываете тип своих (индексных) элементов, но пусть предполагается, что это int. На самом деле это может быть любой тип.

Ваши (индексы..) элементы являются первичным ключом, допустим, что они находятся в свойстве Index:

Класс Product будет выглядеть так:

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. Ваш компилятор не будет жаловаться, однако вы получите исключение во время выполнения

ответил(а) 2021-01-19T13:15:11+03:00 2 месяца, 3 недели назад
44

Я не уверен, для чего вы хотите использовать индекс, и я не думаю, что на самом деле существует концепция индекса на DBSet<TEntity>.

Вероятно, вы можете получить индекс из свойства Local на вашем DBSet, используя FindIndex:

 context.Products.Local.IndexOf(...)

Но я уверен, что есть лучший подход к тому, что вы пытаетесь сделать.

Кроме того, если Id является первичным ключом вашего объекта, если вы знаете идентификатор своего объекта, вам, вероятно, следует использовать Find для получения вашего объекта:

var result = context.Products.Find(Id); // Id = 3.

ответил(а) 2021-01-19T13:15:11+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема