Linq to Sql的延迟加载是一个好东西,但是也会带来一些郁闷的情况,那就是,当我不需要延迟加载一些属性的时候,它还会延迟加载。就是说,有时候我是需要LoadWithAllProperties的,这时候显然我可以用一个DataLoadOptions,设置LoadWith的方法来解决,但是有个问题,就是每次都得设置大量的属性。
我就想设计一个LoadWithAllProperties<T>()方法来解决这个问题,可以根据T的类型生成一个LoadWith好所有T的属性的DataLoadOptions,自然,我想到了反射,可是,问题来了——
LoadWith方法接受的参数是一个Lambda表达式,是硬编码的,而我这里反射出来的属性却是动态的,不可预知的,有什么办法可以解决这个问题吗?难道真的得动态构建Lambda表达式?那就痛苦了点吧?
P.S.由于Properties并不一定都是数据库的,比如我还有可能自定义一些属性,所以我考虑过反射的时候通过Linq to Sql本身就带的那些针对属性的Attribute来区分它是不是一个需要把延迟加载改成LoadWith立即加载的属性。