1

我有一个旧数据库,其 ID 相同,存储有多种表示形式(字符串和整数)。我需要我的查询基于键加入。

我知道SqlFunctions.StringConvert,但它不适用于我的情况,因为 ID 具有 0 前缀,并且数字的规范表示与其他表示不具有字符串等价性。

如何在查询中将我的数字字符串值转换为整数?

4

5 回答 5

0

你不能只使用 TrimStart 吗?

id.TrimStart('0');

(编辑)实际上 LINQ to Entities 不喜欢这样,所以你需要尝试这个而不是在比较之前去除前导零:

实体框架查询中的用户修剪启动

于 2013-04-11T15:55:28.290 回答
0

不确定这是否是您要查找的内容,但由于您的数字字符串中可能包含字符,您可以仅从字符串中提取数字

var getNumbers =Convert.ToInt32 (from t in stringToQuery
                   where char.IsDigit(t)
                   select t).ToArray().ToString());
于 2013-04-11T15:48:59.310 回答
0

也许你应该尝试这样的事情:

    //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;
于 2013-04-11T15:52:19.743 回答
0

我会创建一个类来存储您的表示。

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;
    }
}

用法:

var number = new CanonicalInt(23);
var result = number == 23; // True
于 2013-04-11T16:03:57.503 回答
0

如果你的字符串总是以规范数字结尾,它们可能是 patindex、datalength 和 stringconvert 的组合?(请将模拟的 SqlFunctions 替换为真实的,然后它应该在表上的 2entities 上下文中运行):

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();

这些只是模拟的 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;
}
于 2013-04-11T20:48:59.467 回答