我目前正在尝试了解LINQ的一些基础知识.我一直在使用LINQPad来查询Netflix OData源.
在使用lambda查询时,我似乎无法选择单个属性 - 理解查询完美无缺.我找到了一段代码,使用Netflix oData源上的lambdas执行更复杂的查询,这似乎适用于返回实体的一个属性.
// works fine
var compQuery = from t in Titles
where t.ReleaseYear == 2007
select new { t.Name };
compQuery.Dump();
// fails: "Can only specify query options (orderby, where, take, skip) after last navigation."
var lambdaQuery = Titles
.Where(t => t.ReleaseYear == 2007)
.Select(t => t.Name);
lambdaQuery.Dump();
// works fine - found on SO.
var lambdaQuery2 = People
.Expand("TitlesActedIn")
.Where(p => p.Name == "George Lucas")
.First()
.TitlesActedIn.Select(t => t.ShortName);
lambdaQuery2.Dump();
Run Code Online (Sandbox Code Playgroud)
当有人要求返回一个属性时,有没有人可以解释为什么基本的lambda查询失败?
Bro*_*ass 12
OData不支持投影到属性 - 你可以解决这个问题:
var lambdaQuery = Titles
.Where(t => t.ReleaseYear == 2007)
.Select(x=> new { x.Name })
.AsEnumerable()
.Select(t => t.Name);
Run Code Online (Sandbox Code Playgroud)
使用AsEnumerable()强制查询的最后部分在Linq-to-Objects上下文(而不是OData查询)中执行,其中投影工作正常.
试试这个 - 它实际上相当于你的第一个:
// fails: "Can only specify query options (orderby, where, take, skip) after last navigation."
var lambdaQuery = Titles
.Where(t => t.ReleaseYear == 2007)
.Select(t => new { t.Name });
lambdaQuery.Dump();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9147 次 |
| 最近记录: |