C# 实体框架-如何在查询中从字符串转换为整数

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

我有一个具有相同ID的遗留数据库,它以多种表示形式(字符串和整数)存储。我需要根据密钥加入查询

我知道
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;
}