Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c#中的拆分字符串中声明变量,并在这些字符串之间搜索db行_C#_Asp.net_Asp.net Mvc_Linq - Fatal编程技术网

在c#中的拆分字符串中声明变量,并在这些字符串之间搜索db行

在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,则应将其拆分为两个变量,并搜索该范围内的所有元素 如何做到这一点。我认为使用枚举数范围可以做到这一点,但我面临的问题是,拆分字符串需要声明为单独的变量,并在这两个变量之间进行搜索。这是我做不到的 下面是示例代码

我有一个要求,比如搜索功能, 编辑:搜索就像一组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为字符串,因此我无法使用逻辑运算符。很抱歉,问题不清楚,我现在编辑了相同的问题,请您检查一下。几乎是这个这是正确的想法,但要做到完美,需要按照您的建议进行一些修改。