我刚刚开始掌握 Linq 中的编译查询,并且遇到了一些奇怪的行为。
此查询编译良好:
public static Func<DataContext, string, object> GetJourneyByUrl =
CompiledQuery.Compile<DataContext, string, object>((DataContext dc, string urlSlug) =>
from j in dc.Journeys
where !j.Deleted
where j.URLSlug.Equals(urlSlug)
select new KeyValuePair<string, int>(j.URLSlug, j.JourneyId)
);
但是当我尝试将返回类型从对象更改为 KeyValuePair 时,如下所示:
public static Func<DataContext, string, KeyValuePair<string, int>> GetJourneyByUrl =
CompiledQuery.Compile<DataContext, string, KeyValuePair<string, int>>((DataContext dc, string urlSlug) =>
from j in dc.Journeys
where !j.Deleted
where j.URLSlug.Equals(urlSlug)
select new KeyValuePair<string, int>(j.URLSlug, j.JourneyId)
);
我收到以下错误:
CS1662:无法将 lambda 表达式转换为委托类型 'System.Func<DataContext,string,System.Collections.Generic.KeyValuePair<string,int>>' 因为块中的某些返回类型不能隐式转换为委托返回类型
如何KeyValuePair
从已编译的查询中返回单个?或者我会以完全错误的方式解决这个问题?