首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

linq 查询接口对象解决方法

2013-07-01 
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语句,如果你的接口对象并不在数据库中,则一定会报错

热点排行