iqueryable选择/哪里不工作

时间:2010-06-17 20:56:51

标签: c# asp.net-mvc linq nhibernate

我有两张桌子Boxer和Prospect。拳击手有像名字和dob等一般的东西和BoxerId 虽然Prospect只包含一个值(目前),它是一个boxerId。 如果拳击手是潜在客户(即将到来的拳击手),那么Id将出现在潜在客户表中。

这很好但现在我想选择所有潜在的拳击手

    public static IQueryable<Boxer> IsProspect(this IQueryable<Boxer> query)
    {
        //this does not filter down to only prospects!!!
        return query.Where(x => x.Prospect != null);
    }

这是我打电话使用的功能:

var repository = GetRepository<Boxer>();
var boxers = repository.Query().IsProspect();

我希望这会将我所有拳击手的集合过滤到只是前景的拳击手!

奇怪的是它没有过滤它但是如果我将鼠标悬停在我的拳击手对象上并在调试期间查看每个拳击手我可以看到“IsProspect”是正确还是错误 IsProspect Debug Example http://img534.imageshack.us/img534/4361/isprospect.png

3 个答案:

答案 0 :(得分:1)

如果您只想要那些IsProspect为true的对象,那么将其用作谓词:

public static IQueryable<Boxer> IsProspect(this IQueryable<Boxer> query)
{
    return query.Where(x => x.IsProspect);
}

答案 1 :(得分:0)

听起来你应该使用table-per-subclass inheritance

答案 2 :(得分:0)

重载datacontext并直接从datacontext对象

调用该函数
public partial class myDataContext
{
       public IQueryable<Boxer> IsProspect()
       {
             return from tBoxer in myDataContext.tBoxer 
                    where tBoxer.IsProspect == true             
                    select tBoxer;
       }
}

你可以称之为正常的函数调用,如var db = new myDataConext(); var prospects = db.IsProspect();