gani7787 Ответов: 2

Получить значение между двумя числами с помощью запроса LINQ


Привет,

Мне нужно значение запроса LINQ между двумя числами.

Но в моем случае два числа-это совсем другое.

тип данных значения сравнения-double.

поиск значения в столбце datatype - string (text)

я попытался обратиться в дубль. Но это не работает.

Запрос ниже

Тип данных MIN и MAX Value-double Ex: 200 и 210

Мой тип данных столбца ABC-строка (текст) и значение типа "205","198","215"


var Qry = (from r in tbl1.AsEnumerable()

where Convert.ToDouble(r.Field<string>("ABC")) >= Convert.ToDouble(Min_VALUE)
&& Convert.ToDouble(r.Field<string>("ABC")) >= Convert.ToDouble(Max_VALUE)
select new
{
A_VALUE = Convert.ToDouble(r.Field<string>("ABC")),
}).Count();


Я хочу, чтобы между значениями от 200 до 210.

таким образом, результат " 205"

Как написать запрос linq для строки и числа..?

Что я уже пробовал:

Тип данных MIN и MAX Value-double Ex: 200 и 210

Мой тип данных столбца ABC-строка (текст) и значение типа "205","198","215"


var Qry = (from r in tbl1.AsEnumerable()

                       where Convert.ToDouble(r.Field<string>("ABC")) >= Convert.ToDouble(Min_VALUE)
                             && Convert.ToDouble(r.Field<string>("ABC")) >= Convert.ToDouble(Max_VALUE)
                         select new
                         {
                             A_VALUE = Convert.ToDouble(r.Field<string>("ABC")),
                         }).Count();

2 Ответов

Рейтинг:
1

Maciej Los

Если я вас хорошо понимаю, вы хотите получить промежуточное значение из строкового списка чисел. Проверить это:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("ABC", typeof(string)));
dt.Rows.Add(new object[]{"205,198,215"});
dt.Rows.Add(new object[]{"105,198,315"});
dt.Rows.Add(new object[]{"405,298,215"});
dt.Rows.Add(new object[]{"305,398,315"});
dt.Rows.Add(new object[]{"305,298,415"});


var result = dt.AsEnumerable()
	.Select(x => new 
		{
			Text = x.Field<string>("ABC"),
			Numbers = x.Field<string>("ABC")
				.Split(new string[]{","}, StringSplitOptions.RemoveEmptyEntries)
				.Select(y => Convert.ToInt32(y))
				.ToList()
		})
	.Select(x => new
		{
			Text = x.Text,
			MinVal = x.Numbers.Min(),
			MaxVal = x.Numbers.Max(),
			InBetweenVal = x.Numbers.First(y => y>x.Numbers.Min() && y<x.Numbers.Max())
		})
	.ToList();

Console.WriteLine("Text\tMinVal\tMaxVal\tInBetweenVal");
foreach(var r in result)
{
	Console.WriteLine("{0}\t{1}\t{2}\t{3}", r.Text, r.MinVal, r.MaxVal, r.InBetweenVal);
}


Результат:
Text        MinVal  MaxVal  InBetweenVal
205,198,215 198     215     205
105,198,315 105     315     198
405,298,215 215     405     298
305,398,315 305     398     315
305,298,415 298     415     305


Рейтинг:
0

F-ES Sitecore

Вы сравниваете, где ABC >= min и ABC >= max, поэтому это будет верно только для значений >= max. Я думаю, вы имеете в виду ABC >= min и ABC &низкотемпературный;= максимум

where Convert.ToDouble(r.Field<string>("ABC")) >= Convert.ToDouble(Min_VALUE)
                             && Convert.ToDouble(r.Field<string>("ABC")) <= Convert.ToDouble(Max_VALUE)