linq 查询接口对象解决方法
linq 查询接口对象直接上伪代码:public interface IPerson{DateTime Birthday {getset}} 学生,老师,家长
linq 查询接口对象 直接上伪代码: public interface IPerson { DateTime Birthday {get;set;} } 学生,老师,家长,其他人 : IPerson 现想写个方法做过滤 public IQueryable<T> Filter<T>(IQueryable<T> queryData) { return queryData.Where(item => (item as IPerson).Birthday < System.DateTime.Now); } 会报错.....求高手解答. 目前知道有一种可以通过附加Expression的做法(调用 Expression.Call实现) [解决办法]
引用: to silentcross: 忘记了,好像是说 不能用 TypeAs 之类 的. IQueryable<T>.where()返回的是IQueryable<T> 用EF4.1 连接的是sql2008 那说的应该是 (item as IPerson).Birthday 这里有问题,改成((IPerson)item).Birthday试试
[解决办法] return queryData.OfType<IPerson>().Where(item => item .Birthday < System.DateTime.Now);
[解决办法] http://msdn.microsoft.com/zh-cn/library/vstudio/bb360913.aspx
Return Value
Type: System.Collections.Generic.IEnumerable<TResult>
An IEnumerable<T> that contains elements from the input sequence of type TResult.
[解决办法] 当你使用linq 进行查询时,分两种情况:
1.查询内存对象。此时,你的查询应是会成功的。
2.查询数据库持久化对象。
此时,你的查询一定会失败。
因为直接查询数据库时,会转换成sql语句,如果你的接口对象并不在数据库中,则一定会报错