Kon*_*Kon 0 .net c# linq asp.net
我确定这是非常愚蠢的事情,但我只是看不到它..
pData.LocationHours是类型的BaseLocationHoursDataSet.LocationHoursDataTable.然而,当我将光标悬停在上面时l,我看到的只是" (range variable) TSource l" - 为什么会这样?linq为什么不知道它正在处理什么?我用不同的DataTable尝试相同的东西,一切正常....不是这个人.可能是什么问题呢?
protected ListItem[] GetHoursTypesListItems(BaseLocationHoursDataSet pData)
{
return (
from l in pData.LocationHours // putting cursor over the l here shows: (range variable) TSource l
select new ListItem
{
Value = l, //ignore the fact that I didn't specify a property - that's the problem, that none of the properties of the object show up.
Text = l
}
).ToArray<ListItem>();
}
Run Code Online (Sandbox Code Playgroud)
.
更新:
问题是它不知道我是什么.而不是向我显示正确的类型(我希望看到LocationHoursRow),我看到"TSource l"..这是什么?为什么不知道我在" from l in pData.LocationHours"行中的含义?
Eri*_*ert 12
我看到"TSource l"..这是什么?
首先,编译器将查询从查询形式转换为方法调用形式.这个查询变成了
pData.LocationHours.Select(l=>new ... )
Run Code Online (Sandbox Code Playgroud)
其次,编译器尝试确定"pData.LocationHours.Select"的含义.如果pData.LocationHours的类型没有Select方法,则编译器开始寻找扩展方法.据推测它找到了扩展方法
IEnumerable<TResult> Select<TSource, TResult>(
this IEnumerable<TSource> source, Func<TSource, TResult> projection)
Run Code Online (Sandbox Code Playgroud)
或者也许它找到相同的IQueryable版本.
现在编译器说"但是TSource和TResult的类型参数是什么?"
我不知道你的问题是什么,但问题很可能发生在这个阶段.由于某种原因,类型推理引擎无法确定TSource是什么.
现在你将鼠标悬停在"l"上.怎么了?intellisense引擎询问语义分析器"l"的类型.语义分析器报告已知"l"是函数中的参数,该函数接受TSource并返回TResult,但是方法类型推导者无法确定TSource对应的实际类型.
所以intellisense引擎尽其所能,并且告诉你l是TSource类型.intellisense引擎还注意到"l"是查询的范围变量,并且也告诉你这个事实.
为什么它不知道l在"from l in pData.LocationHours"行中是什么?
我不知道,但很明显你的代码中有些东西被破坏了.如果不知道所有表达式的类型以及确切的可用扩展方法,我很难说出究竟出现了什么错误.
当代码被破坏而无法编译时,智能感知仍然能够做到最好.我同意在这种情况下结果有点令人困惑,但至少你知道它在出现问题之前就会进行类型推断.
我想也许你需要l.Field:
select new ListItem
{
Value = l.Field,
Text = l.Field2
}
Run Code Online (Sandbox Code Playgroud)
好的如此:由于您使用的是数据集,因此您的查询可能需要与以下内容类似:
var query = pData.Tables["Name"].AsEnumerable()
Run Code Online (Sandbox Code Playgroud)
然后从查询对象中删除LINQ
此外,找到了可能有用的代码段.它使用通用数据集作为参考.
DataSet ds = new DataSet();
FillOrders(ds);
DataTable orders = ds.Tables["SalesOrderHeader"];
var ordersQuery = orders.ToQueryable();
var query = from o in ordersQuery
where o.Field<bool>("OnlineOrderFlag") == true
select new { SalesOrderID = o.Field<int>("SalesOrderID"),
OrderDate = o.Field<DateTime>("OrderDate") };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
452 次 |
| 最近记录: |