在表中,如果列数据类型为varchar,请使用linq to sql仅检索该列的数字/数字值
本文关键字:数字 检索 sql to 请使用 如果 数据类型 varchar linq | 更新日期: 2023-09-27 18:21:32
我有一个表,其列的数据类型为varchar
。我只需要从列中检索那些纯数字的值。为此,我使用了下面显示的Linq查询,它只检查小写字母。它将无法检查此@-1234
。我正在提供我想做什么的细节。
| input | | expected output |
| @!qw1 | | 12345 |
| 12345 | | 90345 |
| ab567 |
| 90345 |
| 123-q |
代码:
pricingdemoEntities price = new pricingdemoEntities();
var money = (from demos in price.demotables
where false == (demos.value.Contains("a") || demos.value.Contains("b") || demos.value.Contains("c") || demos.value.Contains("d") || demos.value.Contains("e") || demos.value.Contains("f") || demos.value.Contains("g") || demos.value.Contains("h") ||
demos.value.Contains("i") || demos.value.Contains("j") || demos.value.Contains("k") || demos.value.Contains("l") ||
demos.value.Contains("m") || demos.value.Contains("n") || demos.value.Contains("o") || demos.value.Contains("p") ||
demos.value.Contains("q") || demos.value.Contains("r") || demos.value.Contains("s") || demos.value.Contains("t") ||
demos.value.Contains("u") || demos.value.Contains("v") || demos.value.Contains("w") || demos.value.Contains("x") ||
demos.value.Contains("y") || demos.value.Contains("z"))
select demos.value).ToList();
foreach (var final in money)
您可以使用SqlFunctions.IsNumeric
扩展方法。
using System.Data.Entity.SqlServer;
var money = (from demos in price.demotables
where SqlFunctions.IsNumeric(demos.value) == 1
select demos.value).ToList();
您可以使用long.TryParse
检查数值
pricingdemoEntities price = new pricingdemoEntities();
long num;
var money= (from demos in price.demotables
where long.TryParse(demos.value.ToString(),out num)
select demos.value).ToList();
foreach (var final in money)
请参阅下面的示例,这可能会帮助您。
string[] stringList = { "123", "xsd", "%Vhh", "123H", "5841" }; // just an array of strings
var a = stringList.Where(x => x.All(char.IsDigit)); // checking for digits and returning them
我希望这将帮助您:)
实体框架无法将这些查询转换为SQL,因此一种选择是首先实现结果。这不是很有效,但您可以通过限制查询中返回的内容来改进它。然后对结果进行数字检查。
例如:
var acceptable = ".,0,1,2,3,4,5,6,7,8,9"; // list of acceptable values
var nums = acceptable.Split(',').Select(a=> a[0]); // get the chars
using(var price = new pricingdemoEntities())
{
// You can limit this even further by adding a take or additional where clauses
var query = price.demotables.Select(p => p.value).AsEnumerable();
var money = query.Where(q=> q.value.All(c=> nums.Contains(c)).ToList();
}
尝试使用此
price.demotables.Where(x=>SqlFunctions.IsNumeric(x.Data)==1).ToList()
与其指定使值不是数字的每一个字符,不如指定仅在值是数字时才需要该值。
因此,在原始SQL中,它可能看起来像这样:
SELECT val
FROM table
WHERE ISNUMERIC(val) = 1
在Entity Framework
中,您可以使用方便的SqlFunctions.IsNumeric方法创建类似的查询。
在你的情况下,它看起来像这样:
var money = (
from demos in price.demotables
where SqlFunctions.IsNumeric(demos.value) == 1
select demos.value).ToList();