在c#中的拆分字符串中声明变量,并在这些字符串之间搜索db行
我有一个要求,比如搜索功能, 编辑:搜索就像一组VARCHAR,通常这个ID包含像C001,C002 因此,如果用户输入的是像C001-C010这样的范围,它应该搜索oracle db中C001-C010之间的所有行,这就是我的要求 如果用户在文本框中输入一些范围,如C001-C010,则应将其拆分为两个变量,并搜索该范围内的所有元素 如何做到这一点。我认为使用枚举数范围可以做到这一点,但我面临的问题是,拆分字符串需要声明为单独的变量,并在这两个变量之间进行搜索。这是我做不到的 下面是示例代码在c#中的拆分字符串中声明变量,并在这些字符串之间搜索db行,c#,asp.net,asp.net-mvc,linq,C#,Asp.net,Asp.net Mvc,Linq,我有一个要求,比如搜索功能, 编辑:搜索就像一组VARCHAR,通常这个ID包含像C001,C002 因此,如果用户输入的是像C001-C010这样的范围,它应该搜索oracle db中C001-C010之间的所有行,这就是我的要求 如果用户在文本框中输入一些范围,如C001-C010,则应将其拆分为两个变量,并搜索该范围内的所有元素 如何做到这一点。我认为使用枚举数范围可以做到这一点,但我面临的问题是,拆分字符串需要声明为单独的变量,并在这两个变量之间进行搜索。这是我做不到的 下面是示例代码
else if (!_search.MultipleId.Contains('-'))
{
filterExp = filterExp.And(x => x.Id.Contains(_search.MultipleId));
}
类似这样的事情可能会有所帮助:
var pair = yourstring.Split('-')
.Select(a => new { one= a[0], two= a[1]});
如果Id的格式为CXXX,则可以执行以下操作:
if(_search.MultipleId.Contain("-"))
{
var range = _search.MultipleId.Split('-');
filterExp = filterExp.And(x => x.Id >= range[0] && x.Id <= range1);
}
class Program
{
static void Main(string[] args)
{
var items = new List<string> { "C001", "C010" };
var firstChar = new List<string>();
var remainingChars = new List<string>();
items.ForEach(i =>
{
firstChar.Add(i[0].ToString());
remainingChars.Add(i.Substring(1));
});
firstChar.ForEach(f => { Console.Write(f + " "); });
Console.WriteLine();
remainingChars.ForEach(r => { Console.Write(r + " "); });
Console.WriteLine();
//Prints the following
//C C
//001 010
//Press any key to continue . . .
}
}
if(_search.MultipleId.Contain(“-”))
{
变量范围=_search.MultipleId.Split('-');
filterExp=filterExp.And(x=>x.Id>=range[0]&&x.Id不知道所有业务需求,您可以尝试以下方法:
if(_search.MultipleId.Contain("-"))
{
var range = _search.MultipleId.Split('-');
filterExp = filterExp.And(x => x.Id >= range[0] && x.Id <= range1);
}
class Program
{
static void Main(string[] args)
{
var items = new List<string> { "C001", "C010" };
var firstChar = new List<string>();
var remainingChars = new List<string>();
items.ForEach(i =>
{
firstChar.Add(i[0].ToString());
remainingChars.Add(i.Substring(1));
});
firstChar.ForEach(f => { Console.Write(f + " "); });
Console.WriteLine();
remainingChars.ForEach(r => { Console.Write(r + " "); });
Console.WriteLine();
//Prints the following
//C C
//001 010
//Press any key to continue . . .
}
}
类程序
{
静态void Main(字符串[]参数)
{
变量项=新列表{“C001”、“C010”};
var firstChar=新列表();
var remainingChars=新列表();
items.ForEach(i=>
{
firstChar.Add(i[0].ToString());
添加(i.子字符串(1));
});
firstChar.ForEach(f=>{Console.Write(f+“”);});
Console.WriteLine();
remainingChars.ForEach(r=>{Console.Write(r+“”);});
Console.WriteLine();
//打印以下内容
//丙
//001 010
//按任意键继续。
}
}
我会将数据集转换为一个列表,以便使用开始和结束参数的索引
var items = dataset.ToList();
var searchString = "B1, C10";
var removedWhitespace = Regex.Replace(searchString, @"\s+", "");
var rangeToSearch = removedWhitespace.Split(',');
var startPosition = items.FindIndex(x => x.ID == rangeToSearch.First());
var endPosition = items.FindIndex(x => x.ID == rangeToSearch.Last());
var selectedItems =
items.Skip(startPosition).Take(endPosition - startPosition + 1); // +1 to include the original id's
如果必须,您可以对列表进行排序,但此方法的一个警告是,列表是按字母顺序排序的,因此您可能需要进行一些额外的处理,以确保返回该范围内的所有值。公共静态哈希集getIdsFromRangeQuery(字符串多重ID)
public static HashSet<string> getIdsFromRangeQuery(string multipleIds)
{
multipleIds = multipleIds.ToUpper().Replace(" ", "");
HashSet<string> inSet = new HashSet<string>();
string[] parts = multipleIds.Split(new[] { ";" }, StringSplitOptions.None);
foreach (string part in parts)
{
Regex rgx = new Regex(@"^M([0 - 9] +)C([0 - 9] +)$");
Regex rgxTwo = new Regex(@"^M([0-9]+)C([0-9]+)-M([0-9]+)C([0-9]+)$");
Regex rgxThree = new Regex(@"^[0-9]+$");
Regex rgxFour = new Regex(@"^([0-9]+)-([0-9]+)$");
if (rgx.IsMatch(part))
{
inSet.Add(part);
}
else if (rgxTwo.IsMatch(part))
{
string[] fromTo = part.Split(new[] { "-" }, StringSplitOptions.None);
int mFrom = int.Parse(fromTo[0].Substring(1, fromTo[0].IndexOf("C")));
int mTo = int.Parse(fromTo[1].Substring(1, fromTo[1].IndexOf("C")));
int cFrom = int.Parse(fromTo[0].Substring(fromTo[0].LastIndexOf("C") + 1));
int cTo = int.Parse(fromTo[1].Substring(fromTo[1].LastIndexOf("C") + 1));
for (int i = mFrom; i <= mTo; i++)
{
for (int j = cFrom; j <= cTo; j++)
{
inSet.Add("M" + i + "C" + j);
}
}
}
else if (rgxThree.IsMatch(part))
{
inSet.Add(part);
}
else if (rgxFour.IsMatch(part)
{
string[] fromTo = part.Split(new[] { "-" }, StringSplitOptions.None);
int from = int.Parse(fromTo[0]);
int to = int.Parse(fromTo[1]);
for (int i = from; i <= to; i++)
{
inSet.Add(i.ToString());
}
}
else
{
inSet.Add(part);
}
}
return inSet;
}
{
multipleIds=multipleIds.ToUpper().Replace(“,”);
HashSet inSet=新的HashSet();
string[]parts=multipleIds.Split(新的[]{;“},StringSplitOptions.None);
foreach(部分中的字符串部分)
{
Regex rgx=newregex(@“^M([0-9]+)C([0-9]+)$”);
Regex rgxTwo=newregex(“^M([0-9]+)C([0-9]+)-M([0-9]+)C([0-9]+)$”;
正则表达式rgxThree=新正则表达式(@“^[0-9]+$”;
正则表达式rgxFour=新正则表达式(@“^([0-9]+)-([0-9]+)$”;
if(rgx.IsMatch(部分))
{
插入。添加(部分);
}
否则如果(rgxTwo.IsMatch(部分))
{
string[]fromTo=part.Split(新的[]{“-”},StringSplitOptions.None);
int mFrom=int.Parse(fromTo[0]。子字符串(1,fromTo[0]。IndexOf(“C”));
int mTo=int.Parse(fromTo[1]。子字符串(1,fromTo[1]。IndexOf(“C”));
int cFrom=int.Parse(fromTo[0]。子字符串(fromTo[0]。LastIndexOf(“C”)+1));
int cTo=int.Parse(from to[1]。子字符串(from to[1]。lastinexof(“C”)+1));
对于将在-
位置拆分的(int i=mFrom;i),创建两列one
和two
,但它也将创建多行,其中包含列中的第1、第2、第3…个字符,这与要求的不完全相同。顺便说一句,还有一个额外的右括号)
您需要删除的。您的问题不清楚。要拆分字符串,只需var searchstrings=\u search.MutlipleId.split('-')即可
但是您打算用结果数组中的值搜索什么还没有定义。请澄清您的问题。为了补充@crunchy所说的内容,我们还需要了解您正在搜索的字段。我看到的答案目前采用的方法是生成一组可能的字符串并搜索它们;但是,如果搜索eld可以作为整数搜索,使用范围生成大于/小于搜索将更有效。Hi@crunchy正确编辑了问题,请您再次检查。此处Id为字符串,因此我无法使用逻辑运算符。很抱歉,问题不清楚,我现在编辑了相同的问题,请您检查一下。几乎是这个这是正确的想法,但要做到完美,需要按照您的建议进行一些修改。