![](/img/trans.png)
[英]Cannot convert expression type 'lambda expression' to return type 'System.Linq.Expressions.Expression<System.Func<IProduct,string,bool>>'
[英]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.