|
|
Posted on 2007-10-12 08:16 webabcd 阅读(4876) 评论(30) 编辑 收藏 所属分类: C#
[索引页]
[源码下载]
步步为营VS 2008 + .NET 3.5(4) - C# 3.0新特性之LambdaExpressions(Lambda表达式)、QuerySyntax(查询语法)和AnonymousTypes(匿名类型)
作者: webabcd
介绍
·LambdaExpressions(Lambda表达式)
·QuerySyntax(查询语法)
·AnonymousTypes(匿名类型)
示例
LambdaExpressions.cs(Lambda表达式)
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

using System.Collections.Generic;

 /**//// <summary>
/// LambdaExpressions(Lambda表达式)的摘要说明
/// </summary>
public class LambdaExpressions
  {
 public int ID { get; set; }
 public string Name { get; set; }

public void LambdaExpressionsTest()
 {
List<LambdaExpressions> list = new List<LambdaExpressions>
 {
 new LambdaExpressions { ID = 1, Name = "webabcd" },
 new LambdaExpressions { ID = 2, Name = "webabcdefg" },
 new LambdaExpressions { ID = 3, Name = "webabcdefghijklmn" }
};

IEnumerable<LambdaExpressions> l = list.Where(le => le.Name == "webabcd");

// 上面的(Lambda表达式)等同于下面的(匿名方法)

// IEnumerable<LambdaExpressions> l2 = list.Where(delegate(LambdaExpressions le) { return le.Name == "webabcd"; });



// 相关委托
// public delegate TResult Func<T, TResult>(T arg);
// 相关Where扩展方法
// Func<TSource, bool>:接受一个类型为TSource的参数
// Func<TSource, bool>:某个需要满足的条件,返回bool值
// public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
// {
// foreach (TSource item in source)
// {
// if (predicate(item))
// {
// yield return item;
// }
// }
// }
}
}

QuerySyntax.cs(查询语法)
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

using System.Collections.Generic;

 /**//// <summary>
/// QuerySyntax(查询语法)的摘要说明
/// </summary>
public class QuerySyntax
  {
 public int ID { get; set; }
 public string Name { get; set; }

public void QuerySyntaxTest()
 {
List<QuerySyntax> list = new List<QuerySyntax>
 {
 new QuerySyntax { ID = 1, Name = "webabcd" },
 new QuerySyntax { ID = 2, Name = "webabcde" },
 new QuerySyntax { ID = 2, Name = "webabcdef" },
 new QuerySyntax { ID = 2, Name = "webabcdefg" },
 new QuerySyntax { ID = 2, Name = "webabcdefgh" },
 new QuerySyntax { ID = 2, Name = "webabcdefghi" },
 new QuerySyntax { ID = 2, Name = "webabcdefghij" },
 new QuerySyntax { ID = 2, Name = "webabcdefghijk" },
 new QuerySyntax { ID = 2, Name = "webabcdefghijkl" },
 new QuerySyntax { ID = 2, Name = "webabcdefghijklm" },
 new QuerySyntax { ID = 3, Name = "webabcdefghijklmn" }
};

IEnumerable<QuerySyntax> l = from o in list
where o.Name.Length > 10
orderby o.Name.Length descending
select o;

// 上面的(查询语法)等同于下面的(LINQ扩展方法和Lambda表达式)
// 查询语法相对更容易理解

// IEnumerable<QuerySyntax> l = list.Where(o => o.Name.Length > 10).OrderByDescending(o => o.Name.Length);



// Projection(映射)
// 可以返回一个新的类型
IEnumerable<Projection> l2 = from o in list
where o.Name.Length > 10
orderby o.Name.Length descending
 select new Projection { Name = o.Name };
}
}

 /**//// <summary>
/// 为了演示Projection(映射)而写的实体类
/// </summary>
public class Projection
  {
 public string Name { get; set; }
}

AnonymousTypes.cs( 匿名类型)
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;

using System.Collections.Generic;

 /**//// <summary>
/// AnonymousTypes(匿名类型)的摘要说明
/// </summary>
public class AnonymousTypes
  {
 public int ID { get; set; }
 public string Name { get; set; }
 public int Age { get; set; }

public void AnonymousTypesTest()
 {
List<AnonymousTypes> list = new List<AnonymousTypes>
 {
 new AnonymousTypes { ID = 1, Name = "webabcd", Age = 10 },
 new AnonymousTypes { ID = 2, Name = "webabcdefg", Age = 20 },
 new AnonymousTypes { ID = 3, Name = "webabcdefghijklmn", Age = 30 }
};

// listAnonymousTypes - 匿名类型
var listAnonymousTypes = from l in list
where l.Name == "webabcd"
 select new { Name = l.Name, Age = l.Age };

foreach (var v in listAnonymousTypes)
 {
// v - 匿名类型,可以在Visual Studio中得到编译时检查和完整的intellisense
string name = v.Name;
int age = v.Age;
}

// 声明匿名类型:将new关键词后面的类型名称省略掉
 var person = new { Name = "webabcd", Age = 27 };
// person - 匿名类型,可以在Visual Studio中得到编译时检查和完整的intellisense
string myName = person.Name;
int myAge = person.Age;
}
}
OK
[源码下载]
Feedback
兄弟,请问ObjectDataSource控件能实现海量分页吗?
请问为什么我继承TextBox控件,但设计时在Text属性里输入的文字不是Text="123"这样程现,而是<textbox id="aaa">123</textbox>
利用周末的时间,总算跟上了
.net 3.5带来了很多好东西啊
@ivw
ObjectDataSource可以实现的
应用startRowIndex和maximumRows
“<textbox id="aaa">123</textbox>”?这样?那这应该是输出到客户端html,而不是asp.net的控件啊
打错了,前面是<asp:TextBox>...,这样的。是服务器控件,就算在标准的TextBox里Text里输入内容也是这样的。
@ivw
我试了一下
原来的TextBox控件也是你说的那种情况
就是奇怪,连标准的也是一样,但他还是有Text这属性可以赋值,label是在Text里的,
如果是一样,但我在自定义TextBox里添加了一个集合属性,就会出错了。
<asp:TextBox Id="tx1" runat="server" >123
<a>
<cc1:b>
</cc1:b>
</a>
</asp:TextBox>
@ivw 确实 那就要重写TextBox的Render方法了,没有源码的情况下挺麻烦的 权宜之计,现在如果要设置TextBox的Text属性,就直接在HTML视图里写吧
重写Render方法,在write方法里输出Text属性吗?
这样好像不行啊?你有时间可以试试看,继承TextBox,然后定义一个集合属性,在设计模式时的Text属性里输入文字,再在集合属性里添加,看会不会出错。我这里就出错了
@ivw
嗯,重写Render肯定行,就是麻烦
等开源了就方便了,很快了
现在就只能在HTML视图手写Text属性,然后设置你的集合属性就不会出错了
你也试到了这种程况吗?Render不是可以重写吗?
protected override void Render(HtmlTextWriter writer)
@ivw 就是重写那个,在原来的代码上改一改就好了 所以等.net开源后就好办了
现在不是可以在里面改东西吗?
protected override void Render(HtmlTextWriter writer)
{
。。。。。
}
难道你说是要修改Render本身?
|