好吧,我几天来一直在反对这个问题,在学习LINQ后我觉得我走在了正确的轨道上.但我有一个SQL大脑,有时很难转换为C#.
我有两个数组,一个按字母顺序排序,另一个按ID排序.我需要按字母顺序排序第二个数组.ID是加入因子.IEAID = P.ID.
这是我的数组和示例值;
private IGenericListItem[] _priceLevels = new IGenericListItem[0];
_priceLevels is in the form of {ID, Name}
{3, A}
{8, B}
{4, C}
{7, D}
{5, E}
{9, F}
{1, G}
Run Code Online (Sandbox Code Playgroud)
编辑:更新此以显示_assignmentControls包含一个子数组.我没有为疯狂做这样的借口.它实际上包含_priceLevels的副本...
protected ArrayList _assignmentControls = new ArrayList();
_assignmentControls is in the form of {ID, LastPrice, NewPrice, _priceLevels[]}
{1, 1.00, 2.00, _priceLevels}
{2, 1.00, 2.00, _priceLevels}
{3, 1.00, 2.00, _priceLevels}
{4, 1.00, 2.00, _priceLevels}
Run Code Online (Sandbox Code Playgroud)
部分问题在于我正在尝试比较/加入ArrayList和IGenericListItem.
In SQL I would do something like this;
SELECT A.*
FROM _assignmentControls A JOIN _priceLevels P
ON A.ID = P.ID
ORDER BY P.Name
Run Code Online (Sandbox Code Playgroud)
这将返回一个_assignmentControls表,该表按_priceLevels中的值排序.
在C#LINQ中,我做到了这一点,但似乎无法做到这一点;
var sortedList =
from a in _assignmentControls
join p in _priceLevels on a equals p.ID
orderby p.Name
select _assignmentControls;
Run Code Online (Sandbox Code Playgroud)
我在join和orderby下获得红色波浪形,p.Name中的p为红色.并且A)它不起作用.B)我不确定它会将sortedList作为按_priceLevels.Name排序的_assignmentControls的排序版本返回.
编辑:当我将鼠标悬停在"加入"时,我得到"方法的类型参数'IEnumerable System.Linq.Enumerable.Join(此Enumerable,IEnumerable,Func,Func ....'不能从查询中提取.我是现在正在研究.
谢谢你的期待!
当我将鼠标悬停在"join"上时,我得到"该方法的类型参数
IEnumerable System.Linq.Enumerable.Join(this Enumerable,IEnumerable, Func,Func....不能从查询中获取.
我可以解释这里发生了什么,以便你可以追踪它.
当你说
from firstitem in firstcollection
join seconditem in secondcollection on firstkey equals secondkey
select result
Run Code Online (Sandbox Code Playgroud)
编译器将其转换为:
Enumerable.Join(
firstcollection,
secondcollection,
firstitem=>firstkey,
seconditem=>secondkey,
(firstitem, seconditem)=>result)
Run Code Online (Sandbox Code Playgroud)
Enumerable.Join 是一个通用方法,它有四个类型参数:第一个集合的元素类型,第二个集合的元素类型,键类型和结果类型.
如果您收到该错误,那么根据您提供给编译器的信息,无法推断出这四件事中的一件.例如,也许:
最后一点是最有可能的.例如,假设第一个键是int,第二个键是short.由于每个short都可以转换为int,int将获胜,第二个键将自动转换为int.现在假设第一个键类型是Giraffe,第二个键类型是Tiger.两者都不比另一个好.C#并没有说"哦,他们都是两种Animal,所以我们选择它." 相反,它表示你没有提供足够的信息来确定你的意思; 你应该将其中一个投入Animal,然后它变得清晰.
合理?
我在2006年有一个半小时的视频来解释这个功能 - 当我向编译器添加有问题的功能时,这又回来了 - 所以如果你想要更深入的解释,请查看它.
http://ericlippert.com/2006/11/17/a-face-made-for-email-part-three/
更新:我再次仔细阅读你的问题:
部分问题是因为我正在尝试比较/加入an
ArrayList和anIGenericListItem.
有问题.序列的类型不能从a确定ArrayList.你不应该再使用ArrayList了.事实上,你不应该在2005年之后编写的任何代码中使用它.List<T>用于一些合适的T.
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |