powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq to Xml -- как правильно?
8 сообщений из 8, страница 1 из 1
Linq to Xml -- как правильно?
    #39347079
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа,
посмотрите вот такой кусочек кода. Задача: Проверить, что есть определённый нод, найти его, поменять его аттрибут.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        public static void ExpandMetadata(MetadataDataContext m, System.Xml.Linq.XElement n)
        {

            if (n.Elements("COLUMNS").Descendants("COLUMN").Where(c => c.Attribute("COLUMN_NAME").Value == "rv").Count() == 0)
                throw new MetadataException("Mandatory column 'rv' is not found in metadata.");
            foreach (var column in n.Elements("COLUMNS").Descendants("COLUMN").Where(c => c.Attribute("COLUMN_NAME").Value == "rv"))
            {
                column.Attribute("SCR_EXPR").Value = "CONVERT(BIGINT, CONVERT(BINARY(8), [rv]))";
            }
        }



Вопрос такой: а как записать это красивей, правильней и оптимальней? Интересно, как это принято писать средствами Linq to Xml.
...
Рейтинг: 0 / 0
Linq to Xml -- как правильно?
    #39347085
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_voronin,
Код: c#
1.
2.
3.
4.
5.
var xy = doc.XPathSelectElementsXPathSelectElements("//COLUMNS/COLUMN[ (@COLUMN_NAME = 'rv') and not(not(@SCR_EXPR)) ]");
foreach(var el in xy)
{
	el.Attribute("value").Value = "xxx";
}



doc == XElement
...
Рейтинг: 0 / 0
Linq to Xml -- как правильно?
    #39347112
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
busera_voronin,
Код: c#
1.
2.
3.
4.
5.
var xy = doc.XPathSelectElementsXPathSelectElements("//COLUMNS/COLUMN[ (@COLUMN_NAME = 'rv') and not(not(@SCR_EXPR)) ]");
foreach(var el in xy)
{
	el.Attribute("value").Value = "xxx";
}



doc == XElement

Не думаю, что это правильный метод именно в рамках Linq to XML . Это все равно что позабыть про Linq x.Select() и начать писать циклы.
...
Рейтинг: 0 / 0
Linq to Xml -- как правильно?
    #39347745
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	 var elements = n
                .Elements("COLUMNS")
		.Descendants("COLUMN")
		.Where(e => (string)e.Attribute("COLUMN_NAME") == "rv");

         if (elements.Count() == 0)
                throw new MetadataException("Mandatory column 'rv' is not found in metadata.");

         elements.ToList()
                 .ForEach(e => e.SetAttributeValue("SCR_EXPR", "CONVERT(BIGINT, CONVERT(BINARY(8), [rv]))"));



Манипулировать строковыми константами в каждом методе не напрягает?
...
Рейтинг: 0 / 0
Linq to Xml -- как правильно?
    #39348285
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buser,
В LINQ нет ForEach, есть Aggregate
...
Рейтинг: 0 / 0
Linq to Xml -- как правильно?
    #39348311
Фотография Смузи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ForEach есть в List<T>
...
Рейтинг: 0 / 0
Linq to Xml -- как правильно?
    #39348365
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ, ага :) лучше его.
...
Рейтинг: 0 / 0
Linq to Xml -- как правильно?
    #39348380
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ, останется только подумать как добиться нужного результата... у меня не получилось в линкепаде сходу... а читать - не барское дело...
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Linq to Xml -- как правильно?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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