Лямбда-выражения используют =>
нотацию. Попробуйте что-то вроде этого:
var idToFind = new Guid("adda423f-8c38-40e0-9f39-6deceb787bc0");
var result = _repository.Persons
.Where(p => p.TypeId == PersonTypeIds.Director && p.PersonId == idToFind);
В этом выражении p
представляет каждую запись Person в таблице Persons
, сравниваемую один за другим, используя логическое выражение, следующее за ним.
В зависимости от вашего источника данных, сравнение для каждого p
будет выполнено либо с помощью NET в памяти, либо это произойдет внутри вашей базы данных с использованием предложения SQL WHERE
, которое составлено из логического выражения. Последнее было бы оптимальным, потому что это означало бы, что не вся таблица Persons должна быть перенесена в. NET память, прежде чем может быть выполнено сравнение.
Обновление - Чтобы применить то же условие Несколько раз, не повторяя его в своем коде, сохраняя при этом преимущества перевода LINQ в SQL без изменений, вы можете поместить условие в объект Expression<Func<Person, bool>>
и затем использовать это несколько раз:
Expression<Func<Person, bool>> expression =
p => p.TypeId == PersonTypeIds.Director && p.PersonId == idToFind;
var result1 = datasource1.Where(expression);
var result2 = datasource2.Where(expression);
var result3 = datasource3.Where(expression);
Или с помощью метода, который создает объект Expression:
var result1 = datasource1.Where(GetExpression(idToFind));
var result2 = datasource2.Where(GetExpression(idToFind));
var result3 = datasource3.Where(GetExpression(idToFind));
public Expression<Func<Person, bool>> GetExpression(Guid idToFind)
{
return p => p.TypeId == PersonTypeIds.Director && p.PersonId == idToFind;
}
Или, альтернативно, вы можете использовать вспомогательный метод:
var result1 = FilterByTypeAndId(datasource1, idToFind);
var result2 = FilterByTypeAndId(datasource2, idToFind);
var result3 = FilterByTypeAndId(datasource3, idToFind);
public IQueryable<Person> FilterByTypeAndId(IQueryable<Person> datasource, Guid idToFind)
{
return datasource.Where(p => p.TypeId == PersonTypeIds.Director && p.PersonId == idToFind);
}