将OrderBy谓词中的Lambda表达式从C#转换为VB.net
我有以下内容可以按工作岗位对实体进行排序。所需的顺序在另一个数组中定义。在C#中,此代码起作用:将OrderBy谓词中的Lambda表达式从C#转换为VB.net,c#,vb.net,predicate,C#,Vb.net,Predicate,我有以下内容可以按工作岗位对实体进行排序。所需的顺序在另一个数组中定义。在C#中,此代码起作用: IEnumerable<CreditObject> query = credits.OrderBy(x => { for (int i = 0; i < list.Length; i++) { if (x.Job == list[i]) return i; } throw new NotImplement
IEnumerable<CreditObject> query = credits.OrderBy(x =>
{
for (int i = 0; i < list.Length; i++)
{
if (x.Job == list[i])
return i;
}
throw new NotImplementedException("Job not within List");
});
这不会编译,在
函数(x)
之后会出现“Expression expected”。我做错了什么?首先,你要把它变成一种真正的方法:
public int GetCreditObjectPosition(CreditObject x, List<int> list) {
for (int i = 0; i < list.Length; i++) {
if (x.Job == list[i]) {
return i;
}
}
throw new NotImplementedException("Job not within List");
}
首先,你要把它变成一种真正的方法:
public int GetCreditObjectPosition(CreditObject x, List<int> list) {
for (int i = 0; i < list.Length; i++) {
if (x.Job == list[i]) {
return i;
}
}
throw new NotImplementedException("Job not within List");
}
您使用的是哪个版本的VB.NET?VB9不支持带有多个语句的lambda表达式sok,我假设VB2008是版本9,所以这可能是问题所在。谢谢另一种选择是什么?使用某种形式的委托来克服此问题?您使用的是哪种版本的VB.NET?VB9不支持带有多个语句的lambda表达式sok,我假设VB2008是版本9,所以这可能是问题所在。谢谢另一种选择是什么?用某种形式的授权来克服这个问题?
IEnumerable<CreditObject> query =
credits.OrderBy(x => GetCreditObjectPosition(x, list));
public int GetCreditObjectPosition(CreditObject x, List<int> list) {
var jobDictionary =
list.Select((job, index) => new { Job = job, Index = Index } )
.ToDictionary(item => item.Job, item => item.Index);
int position;
if(!jobDictionary.TryGetValue(x.Job, out position)) {
throw new Exception("Job not within List");
}
return position;
}