LINQ to SQL and the XML datatype
Today i have done some stuff with LINQ to SQL and the xml data type from SQL Server 2005. I had some problem finding information about this and spent some hours figuring out how the insert/update/delete worked. Post a comment if you find something I’ve done wrong. This is mostly for my own reference.
Get data
var q = (from ec in Business.PostCalc. ExtraCompensation.Descendants("compensation") select new { id = ec.Attribute("id").Value, code = ec.Element("code").Value, amount = ec.Element("amount").Value, description = ec.Element("description").Value }).ToList(); lwExtraCompensation.DataSource = q; lwExtraCompensation.DataBind();
Delete data
You should of course run SubmitChanges and so on in some method. I do this way so that we can save everything at once later.
XElement ec = Business.PostCalc.ExtraCompensation; XElement newExtraComp= new XElement(ec); newExtraComp.DescendantsAndSelf("compensation") .Where(x => x.Attribute("id").Value.ToString() == e.CommandArgument.ToString()).First().Remove(); Business.PostCalc.ExtraCompensation = newExtraComp; txtDescription.Text = ""; txtAmount.Text = ""; txtCode.Text = ""; PostCalculationChanged(this, new EventArgs());
Update data
XElement ec = Business.PostCalc.ExtraCompensation; XElement newExtraCompensation = new XElement(ec); newExtraCompensation.Add(new XElement("compensation", new XElement("description", txtDescription.Text), new XElement("amount", txtAmount.Text), new XElement("code", txtCode.Text), new XAttribute("id", Guid.NewGuid())) ); Business.PostCalc.ExtraCompensation = newExtraCompensation; txtDescription.Text = ""; txtAmount.Text = ""; txtCode.Text = ""; PostCalculationChanged(this, new EventArgs());