
置顶随笔
posted @ 2006-12-29 08:17 夜风 阅读(2135) 评论(2)
编辑

2008年12月28日
1、如何使用统一的DataContext 对象。
在使用2008 创建dbml类,每拖入个表格会创建一个与数据表名称一致的实体类:同时为每个dbml类自动生成一个继承
DataContext 类的自定义 DataContext 类。代码如下:PGP_tExteriorDatas、PGP_tExteriorDataApplications属性
返回PGP_tExteriorData、PGP_tExteriorDataApplication 实例。
public partial class AccessDataContext : System.Data.Linq.DataContext
{
public AccessDataContext(string connection) :
base(connection, mappingSource)
{
OnCreated();
}
public System.Data.Linq.Table<PGP.DataAccess.Entities.PGP_tExteriorData> PGP_tExteriorDatas
{
get
{
return this.GetTable<PGP.DataAccess.Entities.PGP_tExteriorData>();
}
}
public System.Data.Linq.Table<PGP.DataAccess.Entities.PGP_tExteriorDataApplication> PGP_tExteriorDataApplications
{
get
{
return this.GetTable<PGP.DataAccess.Entities.PGP_tExteriorDataApplication>();
}
}
}
由上面可以看到 AccessDataContext 和数据表实体对象并不存在依赖关系,我们只要在DataContext 自定义对象中添加一个 属性 并返回需要的数据表实体类型的 DataTable <T>类型即可。
例如在别dbml类中存在 CoutemTable 数据表实体。我们只需要在 AccessDataContext 类中添加如下代码即可:
public System.Data.Linq.Table<PGP.DataAccess.Entities.CoustemTable > CoustemTables
{
get
{
return this.GetTable<PGP.DataAccess.Entities.CoustemTable >();
}
}
这样我们就可以在同一DataContext 控制并 访问所有数据实体。

Code
var dbContext = new AccessDataContext())
var exData1=dbContext.PGP_tExteriorDatas.FirstOrDefault(c => c.KeyId == keyId);
var exData2=dbContext.PGP_tExteriorDataApplication.FirstOrDefault(c => c.KeyId == keyId);
var exData3=dbContext.CoustemTalbe.FirstOrDefault(c => c.KeyId == keyId);
2、如何使用列名构建动态lambda查询表达式。
在上面访问PGP_tExteriorData、PGP_tExteriorDataApplication、CoustemTable 实体是我们都用到
lambda 表达式 c => c.KeyId == keyId ,那么有没有一个方法可以将这三个数据访问方法放到一个公共的方法中呢。
这也是问题困扰我很久,开始只是用泛型一直得不到结果,后来使用expression tree后终于得以解决。
代码如下:
其中KeyId属性为数据表中的主键,使用共有属性。

Code
public void DeleteApplicationEntity<T>(string KeyId) where T:class
{
using (var db = new AccessDataContext())
{
T appEntity = db.GetTable<T>().SingleOrDefault<T>(GetLinqLambda<T>("KeyId", KeyId));
}
}
private Expression<Func<T, bool>> GetLinqLambda<T>(string propertyName,string KeyId) where T : class
{
ParameterExpression paraExp = Expression.Parameter(typeof(T), "c");
ConstantExpression leftExp = Expression.Constant(KeyId, typeof(string));
Expression rightExp = Expression.Property(paraExp, propertyName);
BinaryExpression binaryExp = Expression.Equal(rightExp, leftExp);
Expression<Func<T, bool>> queryLambda = Expression.Lambda<Func<T, bool>>(binaryExp, new ParameterExpression[] { paraExp });
return queryLambda;
}
如果对Expression Tree 的构建还没有理解,可以查看 System.Linq.Expressions 命名空间的相关介绍和方法,网上这方面的资料也很多可查找。
这样我们一个系统只需要一个访问方法完成对数据库各个表的数据查询访问。
调用方式如下:DeleteApplicationEntity<PGP_tExteriorData>("KeyID");
DeleteApplicationEntity<PGP_tExteriorDataApplication>("KeyID");
DeleteApplicationEntity<PGP_CoustemTable >("KeyID");
以上是我在使用linq to sql 中得到的一点经验,希望给学习linq的新手有所帮助。
posted @ 2008-12-28 22:01 夜风 阅读(127) 评论(0)
编辑

2008年10月6日
3年.net asp.net 开发工作经验。熟悉 javascript,html.jquery,ajax,sql等技术。
独立开发OA系统,已在企业成功使用。 参与开发销售系统、信息化集成、财务集成等。
OA系统采用3层架构:DB用公司原有的,主要做界面、业务层开发。
工作地点:首选南宁,薪水:3000以上。
工作地点:其他城市,可以交流,面谈:QQ:94628006,mxb33@sohu.com
posted @ 2008-10-06 11:25 夜风 阅读(839) 评论(9)
编辑
匆匆的长假过后,终于下定决心辞掉3年来的开发工作。确实有些不舍,从毕业到现在,时间一滑就是3年。这个小小的南方城市,留下多少的回忆?
下一个工作将在何方?能否有新的发展。
这3年来学到了什么?
从企业开始的朝气蓬勃到现在的死气沉沉,一切皆由缘起缘落。
也许现在管理层也想不通为什么会变化这么大,哈哈!我也想通为什么管理层现在还没看出问题。
做过平台维护,刚毕业的菜鸟揽上国家项目,什么也没学到,糊里糊涂结束了平台的维护。
OA系统融入了太多的心血,离开了有点依依不舍,希望你有后能能买的好,这样也是对我的一个回报吧。
posted @ 2008-10-06 11:17 夜风 阅读(195) 评论(3)
编辑

2007年10月24日
protected void rpt_ItemCreated(Object sender, RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Footer)
Label lbl = (Label)e.Item.FindControl("myLabel");
}
or
Label lbl = (Label)Repeater1.Controls[Repeater1.Controls.Count-1].FindControl("myLabel");
posted @ 2007-10-24 17:16 夜风 阅读(188) 评论(0)
编辑

2007年5月22日
在项目开发中遇到这一个问题 ,需要这样一个查询(按主表id分组合并从表中对应的字符串字段(name),并显示在主表查询表中)。数据表设计如下:
主表
从表
| id |
mstr_id(对应为主表id值) |
det-name |
| 1 |
1 |
人 |
| 2 |
1 |
生 |
| 3 |
2 |
你 |
| 4 |
2 |
我 |
| 5 |
2 |
他 |
例如 对与主表 id =1 数据记录 ,从表中mstr-id=1的数据记录合并name 字段为,人生(人+生);
对与主表 id =2 数据记录 ,从表中mstr-id=2的数据记录合并name 字段为,你我他(你+我+他);
查询后的结果表:
| id |
name |
unitname |
| 1 |
请教 |
人生 |
| 2 |
高手 |
你我他 |
请各位高手的解答和帮助。
posted @ 2007-05-22 10:41 夜风 阅读(1296) 评论(2)
编辑

2007年3月20日
想把一个对象数组作为combobox的数据源:遇到下面问题。
public static void ComBoxBind(Loader.localhost.ListField[] listFieldArray,ComboBox comBoBox)
{
comBoBox.DataSource = listFieldArray; //对象数组
comBoBox.DisplayMember="FieldDesc";//对象属性
comBoBox.ValueMember="ColumnName";//对象属性
}
邦定出来后显示一切正常,就是获取selectvalve一直为空, 目前通过selectindex来选择item。不知道有别的方法没。
posted @ 2007-03-20 12:07 夜风 阅读(420) 评论(2)
编辑

2006年12月29日
posted @ 2006-12-29 08:17 夜风 阅读(2135) 评论(2)
编辑