C# 实体框架-如何在查询中从字符串转换为整数
我有一个具有相同ID的遗留数据库,它以多种表示形式(字符串和整数)存储。我需要根据密钥加入查询 我知道C# 实体框架-如何在查询中从字符串转换为整数,c#,entity-framework,entity-framework-4,typeconverter,sql-function,C#,Entity Framework,Entity Framework 4,Typeconverter,Sql Function,我有一个具有相同ID的遗留数据库,它以多种表示形式(字符串和整数)存储。我需要根据密钥加入查询 我知道SqlFunctions.StringConvert,但它不适用于我的情况,因为ID有0前缀,并且数字的规范表示形式与其他表示形式没有字符串等价性 如何将查询中的数字字符串值转换为整数?不确定您要查找的是否是整数,但由于您的数字字符串中可能包含字符,您可以仅从字符串中提取数字 var getNumbers =Convert.ToInt32 (from t in stringToQuery
SqlFunctions.StringConvert
,但它不适用于我的情况,因为ID有0前缀,并且数字的规范表示形式与其他表示形式没有字符串等价性
如何将查询中的数字字符串值转换为整数?不确定您要查找的是否是整数,但由于您的数字字符串中可能包含字符,您可以仅从字符串中提取数字
var getNumbers =Convert.ToInt32 (from t in stringToQuery
where char.IsDigit(t)
select t).ToArray().ToString());
也许你应该试试这样的东西:
//example
List<string> texts = new List<string>();
List<int> integers = new List<int>();
for (int j = 1; j <= 10; j++)
{
text.Add("00" + j.ToString());
integers.Add(j);
}
var a = from t in texts
join i in integers on Convert.ToInt32(t) equals i
select t;
//示例
列表文本=新列表();
列表整数=新列表();
对于(int j=1;j您不能只使用TrimStart吗
id.TrimStart('0')
(编辑)实际上LINQ to Entities不喜欢这样,因此您需要在比较之前尝试此操作以去除前导零:
我将创建一个类来存储您的表示
public sealed class CanonicalInt: IEquatable<int>, IEquatable<string>
{
private int _number;
private string _canonical
{
get
{
return ""; //logic to turn int into format
}
set
{
_number = 0; ////logic to turn string into format
}
}
public CanonicalInt(int number)
{
_number = number;
}
public CanonicalInt(string number)
{
_canonical = number;
}
public bool Equals(int other)
{
return _number.Equals(other);
}
public bool Equals(string other)
{
if(other == null)
return false;
return _canonical.Equals(other);
}
public static implicit operator int(CanonicalInt canonicalInt)
{
return canonicalInt._number;
}
public static implicit operator string(CanonicalInt canonicalInt)
{
return canonicalInt._canonical;
}
}
如果字符串始终以规范数字结尾,则它们可能类似于patindex、datalength和stringconvert的组合?(请将模拟的SqlFunctions替换为real,它应该在表上的2entities上下文中运行):
这些只是模拟的SQLFunction:
private string StringConvert(int x)
{
return x.ToString();
}
private int PatIndex(string pattern,string target)
{
return target.IndexOf(pattern);
}
private int DataLength(string x)
{
return x.Length;
}
你能举例说明你想做什么吗?我不太明白“数字的规范表示法与其他表示法没有字符串等价性”是什么意思。例如,“0015”是一个有效的字符串id,但“15”是它的规范表示形式。尽管存在不等价性,但我希望它们作为equal进行比较。恐怕这无法转换为查询,将在内存中执行
string [] Strings = new string [] {"0015","0-00152","00-0012"};
int[] Integers = new int[] { 15,12};
var MixedResult = Strings.Where(s => Integers.Any(i => (PatIndex(StringConvert(i),s) + DataLength(StringConvert(i))) == DataLength(s))).ToList();
private string StringConvert(int x)
{
return x.ToString();
}
private int PatIndex(string pattern,string target)
{
return target.IndexOf(pattern);
}
private int DataLength(string x)
{
return x.Length;
}