История изменений
Исправление grim, (текущая версия) :
Нет. Можно построить деревья. То, что получается в данном случае, кстати так и назыается Expression Trees.
Не забывайте Lazy Evaluation
Например следующим шагом вы делаете join с xml докуменом по условию.
var molSpec = from p in Db.Personell
join a in Db.Access on p.PersonellId equals a.PersonellId
where p.Age < 30 && p.Education = High && a.Level < Manager
select new { Id= p.PersonellId, Name = p.Name, Age = p.Age, Birthday = p.DateOfBirth };
var specs = from s in molSpec
join x in xDoc.Element("Feed").Elements("Employee") on s.Id equals x.Attribute("id").Value
where x.Attribute("Salary").Value > 1000
select new { Personell = s, Xml = x };
Соответственно Expression Tree извлечет только данные нужные для результата.
Живым примером было, когда я за пару часов написал тростенькую программу сравнивающую 2 xml документа ~150мб каждый.
Коллега ненавидящий C# сказал что это херня и нужно пользовать профессиональные тулзы запустив XmlSpy.
Через двое суток он его убил и решил доказать мне что Java может лучше и через двое суток предоставил резутат, но, узнав что моя программа сранивает их за пару минут, не стал ее демонстрировать.
Кстати, после небольшой оптимизации она стала справляться за ~20 sec.
Исправление grim, :
Нет. Можно построить деревья. Оно, кстати так и назыается Expression Trees.
Не забывайте Lazy Evaluation
Например следующим шагом вы делаете join с xml докуменом по условию.
var molSpec = from p in Db.Personell
join a in Db.Access on p.PersonellId equals a.PersonellId
where p.Age < 30 && p.Education = High && a.Level < Manager
select new { Id= p.PersonellId, Name = p.Name, Age = p.Age, Birthday = p.DateOfBirth };
var specs = from s in molSpec
join x in xDoc.Element("Feed").Elements("Employee") on s.Id equals x.Attribute("id").Value
where x.Attribute("Salary").Value > 1000
select new { Personell = s, Xml = x };
Соответственно Expression Tree извлечет только данные нужные для результата.
Живым примером было, когда я за пару часов написал тростенькую программу сравнивающую 2 xml документа ~150мб каждый.
Коллега ненавидящий C# сказал что это херня и нужно пользовать профессиональные тулзы запустив XmlSpy.
Через двое суток он его убил и решил доказать мне что Java может лучше и через двое суток предоставил резутат, но, узнав что моя программа сранивает их за пару минут, не стал ее демонстрировать.
Кстати, после небольшой оптимизации она стала справляться за ~20 sec.
Исходная версия grim, :
Нет. Можно построить деревья. Оно, кстати так и назыается Expression Trees.
Не забывайте Lazy Evaluation
Например следующим шагом вы делаете join с xml докуменом по условию.
var molSpec = from p in Db.Personell
join a in Db.Access on p.PersonellId equals a.PersonellId
where p.Age < 30 && p.Education = High && a.Level < Manager
select new { Id= p.PersonellId, Name = p.Name, Age = p.Age, Birthday = p.DateOfBirth };
var specs = from s in molSpec
join x in xDoc.Element("Feed").Elements("Employee") on s.Id equals x.Attribute("id").Value
where x.Attribute("Salary").Value > 1000
select new { Personell = s, Xml = x };
Соответственно Expression Tree извлечет только данные нужные для результата.
Живым примером было, когда я за пару часов нписал тростенькую программу сравнивающую 2 xml документа ~150мб каждый.
Коллега ненавидящий C# сказал что это херня и нужно пользовать профессиональные тулзы запустив XmlSpy.
Через двое суток он его убил и решил доказать мне что Java может лучше и через двое суток предоставил резутат, но, узнав что моя программа сранивает их за пару минут, не стал ее демонстрировать.
Кстати, после небольшой оптимизации она стала справляться за ~20 sec.