您的位置:首页 > 其它

Linq+Xml学习笔记

2010-11-06 10:46 239 查看
Linq是第一次接触,此前一直用个的sql。这次写一个WPF的小程序,WPF的绑定和一般C#程序的绑定不同,以往直接绑定到datatable上,很方便。WPF中多需要转换成对象集合,不方便,就在网上搜索了下Linq的用法,通过这个程序进行了一下整理。

个人感觉,Linq对Xml的操作比Xpath对Xml的操作要方便,对数据库进行操作还是看个人的喜好了。Linq对多表的操作还是感觉相当麻烦的,我个人还是倾向sql。

首先,我建立了一个Dataitem.xml的文件,放在bin目录下

数据的操作无非就是读、写、删、改。新增了一个Linqtoxml的类,在类里添加了以下方法:

加载文件:

public static string Getxmlfile()
{
return System.AppDomain.CurrentDomain.BaseDirectory+"Dataitem.xml";
}


  读:

代码

private void butqry_Click(object sender, System.Windows.RoutedEventArgs e)
{
// TODO: Add event handler implementation here.
XDocument doc=XDocument.Load(Linqtoxml.Getxmlfile());
var items=from i in doc.Descendants("数据项") select i;

if(txt14.Text.Trim() != "")
items=items.Where(k=>k.Element("客户").Value.Contains(txt14.Text.Trim()));
if(txt15.Text.Trim() !="")
items=items.Where(k=>k.Element("产品").Value.Contains(txt15.Text.Trim()));
if(txt16.Text.Trim() !="")
items=items.Where(k=>k.Element("批次").Value.Contains(txt16.Text.Trim()));
if(r1.IsChecked.Value && txt17.Text.Trim() !="")
{
try
{
Convert.ToDateTime(txt17.Text.Trim());
items=items.Where(k=>Convert.ToDateTime(k.Element("日期").Value)>=Convert.ToDateTime(txt17.Text.Trim()));
}
catch
{
MessageBox.Show("第4个文本框只能输入日期!","注意",MessageBoxButton.OK,MessageBoxImage.Information);
return;
}
}
else if(r2.IsChecked.Value && txt18.Text.Trim() !="")
{
try
{
Convert.ToDateTime(txt18.Text.Trim());
items=items.Where(k=>Convert.ToDateTime(k.Element("日期").Value)<=Convert.ToDateTime(txt18.Text.Trim()));
}
catch
{
MessageBox.Show("第5个文本框只能输入日期!","注意",MessageBoxButton.OK,MessageBoxImage.Information);
return;
}
}
else if(r3.IsChecked.Value && txt17.Text.Trim() !="" && txt18.Text.Trim() != "")
{
try
{
Convert.ToDateTime(txt17.Text.Trim());
Convert.ToDateTime(txt18.Text.Trim());
items=items.Where(k=>Convert.ToDateTime(k.Element("日期").Value)>=Convert.ToDateTime(txt17.Text.Trim()) &&
Convert.ToDateTime(k.Element("日期").Value)<=Convert.ToDateTime(txt18.Text.Trim()));
}
catch
{
MessageBox.Show("最后2个文本框只能输入日期!","注意",MessageBoxButton.OK,MessageBoxImage.Information);
return;
}
}
if(r4.IsChecked.Value)
items=items.Where(k=>Convert.ToDouble(k.Element("缺陷").Value)<=0);
else if(r5.IsChecked.Value)
items=items.Where(k=>Convert.ToDouble(k.Element("缺陷").Value)>0);

List<Dataitem> list=new List<Dataitem>();
foreach(var item in items)
{
XElement p=item;
Dataitem it=new Dataitem();
it.Id=Convert.ToInt32(p.Attribute("编号").Value);
it.Client = p.Element("客户").Value;
it.Product = p.Element("产品").Value;
it.Batch = p.Element("批次").Value;
it.Team = p.Element("班组").Value;
it.Total =Convert.ToDouble(p.Element("总数").Value);
it.Receive =Convert.ToDouble(p.Element("接收").Value);
it.Inspection =Convert.ToDouble(p.Element("实检").Value);
it.Bugnum =Convert.ToDouble(p.Element("缺陷").Value);
it.Inspector = p.Element("检验").Value;
it.Inspectionday=p.Element("日期").Value;
it.Bugdescription = p.Element("缺陷描述").Value;
it.Bugresponsible = p.Element("责任人员").Value;
it.Bugwith = p.Element("缺陷处理").Value;
list.Add(it);
}
if(list!=null)
datamain.ItemsSource=list;
else
MessageBox.Show("没有找到符合条件的数据!","注意",MessageBoxButton.OK,MessageBoxImage.Information);


个人使用的一点总结,希望和刚接触的朋友一起学习
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: