Используйте лямбда-выражение
MyClass result = list.Find(x => x.GetId() == "xy");
Примечание. C # имеет встроенный синтаксис для свойств. Вместо того, чтобы писать методы получения и установки (как вы, возможно, привыкли в Java), напишите
private string _id;
public string Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
value
- контекстное ключевое слово, известное только в методе доступа set. Он представляет значение, присвоенное свойству.
Поскольку этот шаблон часто используется, C # предоставляет автоматически реализуемые свойства . Это короткая версия приведенного выше кода; однако поддерживающая переменная скрыта и недоступна (однако она доступна из класса в VB).
public string Id { get; set; }
Вы можете просто использовать свойства, как если бы вы обращались к полю:
var obj = new MyClass();
obj.Id = "xy"; // Calls the setter with "xy" assigned to the value parameter.
string id = obj.Id; // Calls the getter.
Используя свойства, вы можете искать такие элементы в списке, как этот
MyClass result = list.Find(x => x.Id == "xy");
Вы также можете использовать автоматически реализуемые свойства, если вам нужно свойство только для чтения:
public string Id { get; private set; }
Это позволяет вам устанавливать Id
внутри класса, но не извне. Если вам нужно установить его и в производных классах, вы также можете защитить установщик
public string Id { get; protected set; }
И, наконец, вы можете объявлять свойства как virtual
и переопределять их в производных классах, что позволяет вам предоставлять различные реализации для геттеров и сеттеров; как и для обычных виртуальных методов.
Начиная с C # 6.0 (Visual Studio 2015, Roslyn) вы можете писать автоматические свойства только для получения с помощью встроенного инициализатора.
public string Id { get; } = "A07"; // Evaluated once when object is initialized.
Вместо этого вы также можете инициализировать свойства только для получения в конструкторе. Автоматические свойства только для получения являются истинными свойствами, доступными только для чтения, в отличие от автоматически реализуемых свойств с частным установщиком.
Это также работает с автоматическими свойствами чтения-записи:
public string Id { get; set; } = "A07";
Начиная с C # 6.0, вы также можете записывать свойства как члены, содержащие выражение.
public DateTime Yesterday => DateTime.Date.AddDays(-1); // Evaluated at each call.
// Instead of
public DateTime Yesterday { get { return DateTime.Date.AddDays(-1); } }
См .: Платформа компилятора .NET ("Roslyn")
Новые языковые возможности в C # 6
Начиная с C # 7.0 , оба метода получения и установки могут быть написаны с телами выражений:
public string Name
{
get => _name; // getter
set => _name = value; // setter
}
Обратите внимание, что в этом случае сеттером должно быть выражение. Это не может быть заявлением. Приведенный выше пример работает, потому что в C # назначение может использоваться как выражение или как оператор. Значение выражения присваивания - это присвоенное значение, где само присвоение является побочным эффектом. Это позволяет вам назначать значение сразу нескольким переменным: x = y = z = 0
эквивалентно x = (y = (z = 0))
и имеет тот же эффект, что и операторыx = 0; y = 0; z = 0;
.
Следующая версия языка, C # 9.0, которая, вероятно, будет доступна в ноябре 2020 года, позволит использовать свойства только для чтения (или, лучше, инициализировать один раз), которые вы можете инициализировать в инициализаторе объекта. В настоящее время это невозможно со свойствами только для получения.
public string Name { get; init; }
var c = new C { Name = "c-sharp" };
IQueryable<T> result = db.Set<T>().Find(//just id here//).ToList();
он уже знает, что вы ищете первичный ключ. Просто для информации.return object.property = value
vsreturn object.property == value
или если есть только один, и вы хотите, чтобы что-то вроде
SingleOrDefault
могло быть тем, что вы хотитеисточник
Пытаться:
источник
Или, если вы не предпочитаете использовать LINQ, вы можете сделать это по старинке:
источник
Вы также можете использовать расширения LINQ :
источник
MyClass result = list.First(m => m.GetId() == id);
Наиболее кратко вы можете решить свою проблему с помощью предиката, написанного с использованием синтаксиса анонимного метода:
источник
источник
Вы можете создать переменную поиска для хранения ваших критериев поиска. Вот пример использования базы данных.
Здесь «var query» генерирует критерии поиска, которые вы даете через поисковую переменную. Затем «DuePaymentstring.Select» выбирает данные, соответствующие заданным вами критериям. Не стесняйтесь спрашивать, если у вас проблемы с пониманием.
источник