簡體   English   中英

不能隱含轉換類型System.Linq.Expression <System.Func<Object, bool> &gt;來布爾

[英]Cannot implicity convert type System.Linq.Expression<System.Func<Object, bool>> to bool

實際上我有一個這樣的表達式,在Linq to Entity的情況下非常有效

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 to SQL模式時,我不能使用相同的表達式

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

我有這個錯誤

不能將System.Linq.Expression>的類型轉換為bool for Linq to SQL

我不知道為什么......

卡林納

首先,我懷疑你的意思是你可以稱之為:

_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;

如果您更改方法以采用IQueryable<Tender> ,並返回另一個IQueryable<Tender> ,其中添加了條件,那么它可能會起作用。

public static IQueryable<Tender> AddPublicCriteria(this IQueryable<Tender> tenderQuery) {
    // I've omitted your call to DateTime.Now.GetEasternStandardDateTime()
    // since you do not use it.
    return tenderQuery
        .Where(tender => tender.EndDate > DateTime.Now &&
                         tender.IsClosed == false && 
                         tender.IsCancel == false && 
                         tender.PrivacyLevelId == 1
         );
}

var query = Tenders;                       // Original table or data-set
query = query.AddPublicCriteria();         // Add criteria
var results = query.ToList();              // Run query and put the results in a list

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM