powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли делать sql запросы в DataTable(нес вязаную базой данных)
5 сообщений из 5, страница 1 из 1
Можно ли делать sql запросы в DataTable(нес вязаную базой данных)
    #38564459
SNenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Существует DataTable(не связана с базой данных), данные которой обрабатываются переборами (запутанно и "грязно").

Таблица Приблизительно такая:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
DataTable table = new DataTable();
table.Columns.Add("id", typeof(int));
table.Columns.Add("Field1", typeof(string));

table.Rows.Add(25, "01255055502555");
table.Rows.Add(50, "01255055522555");
table.Rows.Add(10, "01255055512555");
table.Rows.Add(21, "01255qwd522f55");
table.Rows.Add(100,"01255qwd511f55");



Для эксперимента я забросил данные этой таблицы в акцесс и там через sql-запрос сделал выборку . Все относительно "чисто" получилось.
Код: sql
1.
2.
3.
4.
SELECT a1, Max(n) AS MaxOfn, Left([a1],Len([a1])-5) & Right([a1],4) AS field1
FROM (SELECT ID, Field1, Mid(Right([Field1],5),1,1) AS n, Left([field1],Len([field1])-6) & Right([field1],4) AS a1
FROM Table1)
GROUP BY a1;



Я новичок в C#, поэтому нуждаюсь в консультации.

Можно ли делать sql запросы в DataTable(не связанную базой данных)? Сделать запрос.
Или заменить запрос чем-нибуть аналогично качественным (не перебором/парсингом)

Основная необходимость, это группировка и фильтрация данных.

Спасибо за внимание.
...
Рейтинг: 0 / 0
Можно ли делать sql запросы в DataTable(нес вязаную базой данных)
    #38564473
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли делать sql запросы в DataTable(нес вязаную базой данных)
    #38564994
SNenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо, помогло.

Нуждающимся:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
    class BOMX_ResolutionTolls
    {
        private static String getCodeWithoutResolution(String s)
        {
            s = s.Replace(" ", "");
            s = s.Substring(0, s.Length - 5) + s.Substring(s.Length - 4, 4);
            return s;
        }

        private static String getValue_FiveFromEnd(String s)
        {
            s = s.Replace(" ", "");
            s = s.Substring(s.Length - 5, 1);

            return s;
        }

        private static String resolution(String s, string value)
        {
            return s.Insert(s.Length - 4, value);
        }

        private static DataTable getFieldWithResolutions(DataTable table, String fieldName)
        {
            DataTable t = new DataTable();
            t.Columns.Add("keyFld", typeof(string));
            t.Columns.Add("groupFld", typeof(string));
            t.Columns.Add("resulutionFld", typeof(string));

            var query = from b in table.AsEnumerable()
                        orderby b.Field<string>("Field1")
                        select new
                        {
                            keyFld = b.Field<String>("Field1"),
                            groupFld = getCodeWithoutResolution(b.Field<String>("Field1").ToString()),
                            resolutionFld = getValue_FiveFromEnd(b.Field<String>("Field1").ToString())
                        };

            foreach (var obj in query)
            {
                t.Rows.Add(obj.keyFld, obj.groupFld, obj.resolutionFld);
            }

            return t;
        }

        private static DataTable getGroup(DataTable table)
        {
            DataTable t1 = new DataTable();
            t1.Columns.Add("key", typeof(String));
            t1.Columns.Add("max", typeof(String));

            var query = from b in table.AsEnumerable()
                        group b by b.Field<string>("groupFld") into g
                        let list = g.ToList()
                        select new
                        {
                            key = g.Key,
                            max = list.Max(x => x.Field<String>("resulutionFld")),
                        };
            foreach (var obj in query)
            {
                t1.Rows.Add(obj.key, obj.max);
            }
            //------------------------------------------------------------
            DataTable t2 = new DataTable();
            t2.Columns.Add("key", typeof(String));
            t2.Columns.Add("max", typeof(String));
            t2.Columns.Add("text", typeof(String));

            var query3 = from b in t1.AsEnumerable()
                         orderby b.Field<string>("key")
                         select new
                         {
                             key = b.Field<String>("key"),
                             max = b.Field<String>("max"),
                             val = resolution(b.Field<String>("key"), b.Field<String>("max"))
                         };
            foreach (var obj in query3)
            {
                t2.Rows.Add(obj.key, obj.max, obj.val);
            }
            return t2;
        }

        public static DataTable getGroupResolutions(DataTable table)
        {
            DataTable query2 = new DataTable();
            DataTable query3 = new DataTable();

            query2 = getFieldWithResolutions(table, "Field1");
            query3 = getGroup(query2);

            return query3;
        }

    }
...
Рейтинг: 0 / 0
Можно ли делать sql запросы в DataTable(нес вязаную базой данных)
    #38564997
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SNenko,

DataTable query2 = new DataTable();
DataTable query3 = new DataTable();

зачем создавать экземпляры, если дальнейший код их не использует:

Код: c#
1.
2.
query2 = getFieldWithResolutions(table, "Field1");
query3 = getGroup(query2);
...
Рейтинг: 0 / 0
Можно ли делать sql запросы в DataTable(нес вязаную базой данных)
    #38565085
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К LINQ to DataSet "DataSet" тут лишнее слово...

2TC: и DataTable - тоже...
LINQ to Objects :The term "LINQ to Objects" refers to the use of LINQ queries with any IEnumerable or IEnumerable<T> collection directly, without the use of an intermediate LINQ provider or API such as LINQ to SQL or LINQ to XML. You can use LINQ to query any enumerable collections such as List<T> , Array , or Dictionary<TKey, TValue> . The collection may be user-defined or may be returned by a .NET Framework API.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Можно ли делать sql запросы в DataTable(нес вязаную базой данных)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]