您的位置:首页 > 其它

Linq学习__03__数据源是IEnumerable<T> 变量,Concat,匿名类,数组下标,返回字符串,group by,orderby

2013-12-22 13:43 471 查看
想运行本程序,请先做好准备工作,请参考:Linq学习__00__准备工作

(1)在HomeController创建新的方法,起名为Index1,其如代码1.1

代码1.1

#region 数据源是IEnumerable<T> 变量
/// <summary>
/// 数据源是IEnumerable<T> 变量
/// 访问地址 Home/Index1
/// Concat()方法,返回匿名类,返回正常普通类,group by
/// </summary>
/// <returns></returns>
public ActionResult Index1()
{
// 创建学生类
List<Student> students = new List<Student>()
{
new Student {First="二代",
Last="富",
ID=111,
Street="123 Main Street",
City="大连",
Scores= new List<int> {97, 92, 81, 60}},
new Student {First="二麻子",
Last="王",
ID=112,
Street="124 Main Street",
City="深圳",
Scores= new List<int> {75, 84, 91, 39}},
new Student {First="吊丝",
Last="项",
ID=113,
Street="125 Main Street",
City="上海",
Scores= new List<int> {88, 94, 65, 91}},
};
// 创建教师类
List<Teacher> teachers = new List<Teacher>()
{
new Teacher {First="柜", Last="钱", ID=945, City = "大连"},
new Teacher {First="斌", Last="孙", ID=956, City = "深圳"},
new Teacher {First="廉洁", Last="李", ID=972, City = "北京"}
};
// 用Concat连接两个子查询,查找城市在“大连”的学生和教师
var peopleInSeattle = (from student in students
where student.City == "大连"
select student.First)
.Concat(from teacher in teachers
where teacher.City == "大连"
select teacher.First);
ViewBag.Concat = peopleInSeattle;

//用匿名类获取多个属性的元素,此时接收的变量是任意的
var anonymous = from student in students
select new
{
First_rand = student.First,//变量是任意的
Last_ha_ha = student.Last//变量是任意的
};
ViewBag.anonymous = anonymous;

//用普通正常类获取多个属性的元素,此时接收的变量必须是声明的Student类的属性
var hasNameClass = (from student in students
select new Student
{
First = student.First,//First必须是Student类的属性
Last = student.Last//Last必须是Student类的属性
}).ToArray();
ViewBag.hasNameClass = hasNameClass;

//使用数组下标,检索出第一科成绩大于80分的学生
var studentQuery =from student in students
where student.Scores[0] > 80
select student;
ViewBag.studentQuery = studentQuery;

//使用对应参数返回字符串
var studentQuery1 = from student in students
select string.Format("我是{0}{1}", student.Last, student.First);
ViewBag.studentQuery1 = studentQuery1;

//使用group by
var studentQuery2 =from student in students
group student by student.Last[0];//注意,linq可以用group语句结尾,再有就是用select结尾,没有第三个了。
ViewBag.studentQuery2 = studentQuery2;

//分组后按字母顺序orderby
var studentQuery3 = from student in students
group student by student.Last[0] into studentGroup
orderby studentGroup.Key
select studentGroup;

ViewBag.studentQuery3 = studentQuery3;

return View();//返回View视图
}
#endregion 数据源是XMLIEnumerable<T> 变量


2)添加视图Index1.cshtml,代码如代码1.2

代码1.2

@{
ViewBag.Title = "Index1";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@{
<div style="background-color: Yellow;">
用Concat连接两个子查询,查找城市在“大连”的学生和教师</div>
foreach (var i in ViewBag.Concat)
{
<div>@i
</div>
}
<br />
<div style="background-color: Yellow;">
用匿名类获取多个属性的元素,此时接收的变量是任意的</div>
foreach (var j in ViewBag.anonymous)
{
<div>@j
</div>
//感兴趣的同学可以放开下面注释掉的语句执行以下,看会否成功
@*<div>First_rand =@j.First_rand + , Last_ha_ha =@j.Last_ha_ha</div>*@
//通过试验可知匿名类的属性是不能被调用的
}
<br />
<div style="background-color: Yellow;">
用普通正常类获取多个属性的元素,此时接收的变量必须是声明的Student类的属性</div>
foreach (var k in ViewBag.hasNameClass)
{
<div>
First=@k.First ,Last=@k.Last</div>
}
<br />
<div style="background-color: Yellow;">
使用数组下标,检索出第一科成绩大于80分的学生</div>
foreach (var m in ViewBag.studentQuery)
{
<div>
First=@m.First ,Last=@m.Last</div>
}
<br />
<div style="background-color: Yellow;">
使用对应参数返回字符串</div>
foreach (var n in ViewBag.studentQuery1)
{
<div>
@n</div>
}
<br />
<div style="background-color: Yellow;">
使用group by,取数据要两层循环</div>
foreach (var p in ViewBag.studentQuery2)
{
foreach (var g in p)
{
<div>我是 @g.Last @g.First</div>
}
}
<br />
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐