2012-04-30 4 views
0

Possible Duplicate:
linq to entities doesn't recognize a methodLinq char.isnumber, чтобы проверить, если строка начинается с номером

Я пытаюсь проверить, если строка начинается с номера

var product09 = DataContext.Products.Where(x => Char.IsNumber(x.ProductName,0)); 

Я также попытался

var product09 = DataContext.Products.Where(x => Char.IsNumber(x.ProductName[0])); 

I получить следующую ошибку:

Boolean IsNumber(Char) 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NotSupportedException: Boolean IsNumber(Char) 

Не могли бы вы помочь?

+0

Есть ли что-нибудь полезное в трассировке стека, которое сообщение об ошибке просит вас изучить? –

+0

Насколько велик список? 1000? 10000? –

+2

Какой у вас поставщик? Linq to SQL? –

ответ

1

«Как насчет:

char[] numbers = new[] { '0', '1', '2' , '3', '4', '5', '6', '7', '8', '9' }; 
DataContext.Products.Where(x => numbers.Contains(x.Substring(0, 1)); 
2

Основываясь на ваш комментарий, который вы используете NHibernate. Вы должны быть в состоянии использовать CreateCriteria метод:

using (ISession session = sessionFactory.OpenSession()) 
{ 
    var result = session.CreateCriteria<Product>() 
         .Add(Restrictions.Like("ProductName", "[0-9]%")) 
         .List<Product>(); 
} 

Вы также можете использовать .Add(Restrictions.Like("ProductName", "[0-9]", MatchMode.Start))

Другой вариант заключается в использовании HQL:

var query = "from Product p where p.ProductName like '[0-9]%'"; 
var result = session.CreateQuery(query).List<Product>(); 

Вы можете использовать SqlMethods.Like method с помощью LINQ to SQL:

var query = dc.Products.Where(x => SqlMethods.Like(x.ProductName, "[0-9]%")); 
Смежные вопросы