[英]Entity Framework - How to convert from String to Integer in query
我有一個具有相同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;
您不能只使用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;
}
}
用法:
var number = new CanonicalInt(23);
var result = number == 23; // True
如果您的字符串始終以規范數結尾,則它們可能類似於patindex,datalength和stringconvert的組合? (請用真實的替換模擬的SqlFunction,它應該在表的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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.