我有一个字符串数组,其中包含不同类型的字符串,我想将这些值分成2个不同的数组。
string[] arr = { "12" , "34-2-2" , "xyz" , "33" , "56-3-4" , "45-4" }
现在我想要linq查询,它在一个数组中给我“ 12”,“ 33”,在另一个数组中给我“ 34-2-2”,“ 56-3-4”。其余的值将被忽略。
var _cust= DbContext.Customer.AsQueryable();
这将包含Id(Int32),在此我要添加查询,如果客户的值为“ 12”,则返回该查询,“ 33”将返回该结果。
var _cont = DbContext.Contacts.AsQueryable();
这将包含DisplayId(字符串),并且在此我想添加查询,如果客户具有“ 34-2-2”,则返回该查询,“ 56-3-4”将返回该结果。
如何为此编写linq查询?
答案 0 :(得分:1)
答案 1 :(得分:0)
以下是您所描述的解决方案。它不使用正则表达式。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp3
{
class Program
{
static readonly char[] digits = "0123456789".ToCharArray();
static void Main(string[] args)
{
string[] arr = { "12", "34-2-2", "xyz", "33", "56-3-4", "45-4" };
var pair = ProcessInput(arr);
Console.WriteLine(String.Join(", ", pair.Item1));
Console.WriteLine(String.Join(", ", pair.Item2));
var done = Console.ReadLine();
}
static Tuple<string[], string[]> ProcessInput(string[] input)
{
var l1 = new List<string>();
var l2 = new List<string>();
foreach(var item in input)
{
if (ContainsOnlyIntegers(item))
{
l1.Add(item);
continue; // move on.
}
var parts = item.Split('-');
if (parts.Length == 3 && parts.All(part => ContainsOnlyIntegers(part)))
{
//must have 3 parts, separated by hypens and they are all numbers.
l2.Add(item);
}
}
return Tuple.Create(l1.ToArray(), l2.ToArray());
}
static bool ContainsOnlyIntegers(string input)
{
return input.ToCharArray().All(r => digits.Contains(r));
}
}
}