LINQ,百度百科上这样解释:
LINQ,语言集成查询(Language Integrated Query)是一组用于C#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
设计UI如下,放置一个ListView用来显示Student列表信息,分贝放置三个按钮设置不同展示Student列表信息的方式。
二、以DataTable作为LINQ查询对象:
三、以XML作为LINQ查询对象:
LINQ,语言集成查询(Language Integrated Query)是一组用于C#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。
这里在列举一个百度百科举的一个小例子,查询int数组中小于5的数字,并按照大小顺序排列。
int[] arr = new int[] { 8, 5, 89, 41, 1, 2, 3, 65, 1 };
var m = from n in arr where n < 5 orderby n descending select n;
foreach(var va in m)
{
Console.WriteLine(va);
}
综合以上解释和例子,所谓的LINQ,就是把内存表当成一个SQL数据库,从而可以利于类似SQL语句的语法对其进行查询,从而很方便地操作对List、数组等内存数据集合。
下面,分别利用List、DataTable、XML作为LINQ查询对象,并以查询结果作为Binding的数据源进行说明,利用LINQ检索结果作为数据源的方式。
首先,我们新建一个Student类:
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
设计UI如下,放置一个ListView用来显示Student列表信息,分贝放置三个按钮设置不同展示Student列表信息的方式。
<Window x:Class="_6_22.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListView Name="listViewStudent" >
<ListView.View>
<GridView>
<GridViewColumn Header="Id" Width="60"
DisplayMemberBinding="{Binding Id}"/>
<GridViewColumn Header="Name" Width="60"
DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Age" Width="60"
DisplayMemberBinding="{Binding Age}"/>
</GridView>
</ListView.View>
</ListView>
<Button Content="加¨®载?List" Height="25" Margin="5" Click="Button1_Click"/>
<Button Content="加¨®载?DataTable" Height="25" Margin="5,190,5,96" Click="Button2_Click"/>
<Button Content="加¨®载?XML" Height="25" Margin="5,234,5,52" Click="Button3_Click"/>
</Grid>
</Window>
一、以List作为LINQ查询对象:
/// <summary>
/// 加¨®载?list
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button1_Click(object sender, RoutedEventArgs e)
{
List<Student> stuList = new List<Student>()
{
new Student(){Id=0,Name="Tim",Age=29},
new Student(){Id=1,Name="Tom",Age=28},
new Student(){Id=2,Name="Kyle",Age=27},
new Student(){Id=3,Name="Tony",Age=26},
new Student(){Id=4,Name="Vina",Age=25},
new Student(){Id=5,Name="Hyman",Age=24},
};
this.listViewStudent.ItemsSource = from stu in stuList where stu.Name.StartsWith("T") select stu;
}
二、以DataTable作为LINQ查询对象:
/// <summary>
/// 加¨®载?DataTable
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button2_Click(object sender, RoutedEventArgs e)
{
DataTable dt = new DataTable();
DataColumn col1 = new DataColumn("Id");
DataColumn col2 = new DataColumn("Name");
DataColumn col3 = new DataColumn("Age");
dt.Columns.Add(col1);
dt.Columns.Add(col2);
dt.Columns.Add(col3);
DataRow row1 = dt.NewRow();
row1["Id"] = 0;
row1["Name"] = "Tim";
row1["Age"] = 29;
dt.Rows.Add(row1);
DataRow row2 = dt.NewRow();
row2["Id"] = 1;
row2["Name"] = "Tom";
row2["Age"] = 28;
dt.Rows.Add(row2);
DataRow row3 = dt.NewRow();
row3["Id"] = 2;
row3["Name"] = "Kyle";
row3["Age"] = 27;
dt.Rows.Add(row3);
DataRow row4 = dt.NewRow();
row4["Id"] = 0;
row4["Name"] = "Tony";
row4["Age"] = 26;
dt.Rows.Add(row4);
DataRow row5 = dt.NewRow();
row5["Id"] = 0;
row5["Name"] = "Vina";
row5["Age"] = 25;
dt.Rows.Add(row5);
DataRow row6 = dt.NewRow();
row6["Id"] = 0;
row6["Name"] = "Hyman";
row6["Age"] = 24;
dt.Rows.Add(row6);
this.listViewStudent.ItemsSource =
from row in dt.Rows.Cast<DataRow>()
where Convert.ToString(row["Name"]).StartsWith("T")
select new Student()
{
Id = int.Parse(row["Id"].ToString()),
Name = row["Name"].ToString(),
Age = int.Parse(row["Age"].ToString())
};
}
三、以XML作为LINQ查询对象:
/// <summary>
/// 加¨®载?XML
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button3_Click(object sender, RoutedEventArgs e)
{
XDocument xdoc = XDocument.Load(@"D:\Test.xml");
this.listViewStudent.ItemsSource =
from element in xdoc.Descendants("Student")
where element.Attribute("Name").Value.StartsWith("T")
select new Student()
{
Id = int.Parse(element.Attribute("Id").Value),
Name = element.Attribute("Name").Value,
Age = int.Parse(element.Attribute("Age").Value)
};
}
最终的显示效果如下: