#c# #regex #split #group-by #iqueryable
#c# #регулярное выражение #разделение #групповое по #iqueryable
Вопрос:
У меня есть результат IQueryable с именами, который выглядит примерно так:
100lbs
10pts
150lbs
11pts
15pt
10pt
Я хотел бы сгруппировать результаты по конечным буквам, чтобы результаты выглядели более похоже на это:
100lbs
150lbs
10pt
15pt
10pts
11pts
Возможно ли / как я мог бы использовать регулярное выражение для достижения этого?
Комментарии:
1. Что такое
IQuerable
поставщик? Я сомневаюсь, что EF / NHibernate поддержал бы что-то настолько сложное.2. нужно немного больше информации. Доступен ли ваш запрос в памяти (Linq2Objects) или он из LinqToSql или LinqToEntities?
3. Вам также следует подумать о том, чтобы иметь
10
иlbs
в отдельных столбцах.4. Это Linq-to-Entities. Я согласен, что отдельные столбцы были бы лучшим дизайном, к сожалению, я унаследовал это.
Ответ №1:
Я не знаю, как выглядит ваша структура linq, но что вы можете попытаться сделать, так это создать поддельный параметр только для сортировки
что-то вроде
var result =
(from c in db.Table
select new
{
mainresult = c.mainresult,
tempresult ==c.mainresult,
}
).ToList().Select(c=>new{
mainresult = c.mainresult,
tempresult=new string(c.mainresult
.Where(!char.IsDigit).ToArray())})
.OrderBy(c=>c.tempresult)
.Select(c=>c.mainresult)
.ToList();
Комментарии:
1. Вы не можете сделать
.Where(!char.IsDigit)
.2. Почему, потому что оно запрашивается?
3. Потому что
Operator ! cannot be applied to operand of type 'method group'
. Вы хотите.Where(x => !char.IsDigit(x))
.4. @gunr2171 И, конечно, это , скорее всего, не сможет быть понято поставщиком запросов, даже если это изменение приведет к его компиляции.
Ответ №2:
var list = new List<string>();
list.Add("100lbs");
list.Add("10lbs");
list.Add("10pts");
var groupings = list.GroupBy((s)=>{
if (s.EndsWith("lbs"))//you can use regex here
{
return "lbs";
}
else if (s.EndsWith("lbs"))
{
return "pts";
}
return "none";
},s=>s);
foreach (var item in groupings)
{
item.key will have category "lbs"/"pts"
}
Комментарии:
1. Помните, это, скорее всего, должно исходить из базы данных, что означает, что запрос выполняется из Entity Framework или NHibernate. Знает ли sql, что
EndsWith
такое?2. Я надеюсь, что это поможет вам начать. используйте регулярное выражение вместо EndsWith. Вы можете получить результаты в отдельный список, а затем обработать, да, EF / Nhibernate также не знает EndsWith или regex.