Как я могу получить предметы, названия которых начинаются с цифры в Linq To Sql? - PullRequest
0 голосов
/ 23 декабря 2009

Как я могу получить список продуктов, которые, например, их productName начинается с цифры?

Спасибо !!

Ответы [ 2 ]

5 голосов
/ 23 декабря 2009
List<string> digits = Enumerable.Range(0, 10).Select(i => i.ToString()).ToList();
var query = from p in db.Products
            where digits.Contains(p.productName.Substring(0, 1))
            select p;

В качестве альтернативы, добавьте следующее в файл отображения DBML:

<Function Name="ISNUMERIC" IsComposable="true">
    <Parameter Name="Expression" Parameter="Expression" Type="System.String" DbType="NVarChar(4000)" />
    <Return Type="System.Boolean" DbType="BIT NOT NULL"/>
</Function>

Тогда вы можете сказать:

var query = from p in db.Products
            where db.ISNUMERIC(p.productName.Substring(0, 1))
            select p;

Вы можете сделать это и в файле сопоставления XML, но я не могу вспомнить синтаксис, который мне нужен для написания необходимого кода в вашем вручную определенном DataContext. Дайте мне знать, если вам это нужно.

Я настоятельно предпочитаю первый метод, но могу видеть использование встроенного в SQL ISNUMERIC, если профилирование говорит мне, что чистая версия LINQ является узким местом в производительности.

1 голос
/ 23 декабря 2009

Один из способов сделать это:

Products.Where (n => n.ProductName.SubString (0,1)> = "0" && n.ProductName.SubString (0,1) <= "9") </p>

...