У меня очень специфический запрос LINQ.Я хотел бы проверить наличие случайно сгенерированного ключа в таблице.
Стандартный запрос можно определить как Select * from Products where SaleId == 'XXXXXXX'
.В этом запросе XXXXXX генерируется генератором случайных символов (также указана длина).Я создал следующее расширение LINQ:
public static string GetUniqueId<T, TProperty>(this IEnumerable<T> source, int length, Func<T, TProperty> idProperty)
{
bool isUnique = false;
string uniqueId = String.Empty;
while (!isUnique)
{
uniqueId = PasswordGenerator.GenerateNoSpecialCharacters(length);
if (!String.IsNullOrEmpty(uniqueId))
{
isUnique = source.AsQueryable().SingleOrDefault(i => idProperty(i).Equals(uniqueId)) == null;
}
}
return uniqueId;
}
Однако я заметил, что этот метод сначала выбирает все записи из таблицы, которая передается в качестве источника, а затем выполняет предложение Where.Такое поведение, очевидно, очень много времени.Таким образом, в основном он выполняет SELECT * FROM Products
, а затем запускает SingleOrDefault
. Можно ли каким-либо образом напрямую выполнить запрос, чтобы он выполнял Select * from Products WHERE Id = 'XXXXXXX'
Вотпример того, как я это называю:
string id = c.L2SOnlineCountMasters.GetUniqueId(9, x => x.MID);
В этом случае L2SOnlineCountMasters - это таблица в базе данных, а c - это экземпляр DataContext.
Надеемся получить ответ на этот вопрос!
Cheerz, Anup