[c#]不能含蓄转换类型 System.Linq.Expression<>> 到布尔型

发布时间: 2017/2/28 23:23:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

其实我有表达这样在 Linq 到实体的情况下工作得很好

public static Expression<Func<Tender, bool>> GetPublic()
{
    var now = DateTime.Now.GetEasternStandardDateTime();

    return tender => tender.EndDate > DateTime.Now &&
                     tender.IsClosed == false && 
                     tender.IsCancel == false && 
                     tender.PrivacyLevelId == 1;
}

我可以使用这样的表达式︰ _repositoryObject.Where(GetPublic()) 和我会得到结果。

但当我不得不做 Linq 到 SQL 模式就像这一样,我不能使用相同的表达式

var results = from t in Tenders
              where Tender.GetPublic()
              select t;

我有此错误

不能含蓄转换类型 System.Linq.Expression > 到有关 Linq to SQL 布尔型

和我不知道为什么...

卡琳

解决方法 1:

首先,我怀疑你实际上的意思是你可以称它为︰

_repositoryObject.Where(GetPublic())

很重要的你调用方法以获取表达式目录树。

您的查询表达式转换为︰

var results = Tenders.Where(t => Tender.GetPublic());

......,不是你在寻找什么。基本上,查询表达式被转译为方法调用使用 lambda 表达式。你不想在这种情况下,所以你不应该使用查询表达式。

如果你想要做其他的事情与查询表达式中,你总是可以混合和匹配,例如

var results = from t in Tenders.Where(Tender.GetPublic())
              where t.SomeOtherProperty
              select t.SomethingElse;
官方微信
官方QQ群
31647020