将OrderBy谓词中的Lambda表达式从C#转换为VB.net

将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

我有以下内容可以按工作岗位对实体进行排序。所需的顺序在另一个数组中定义。在C#中,此代码起作用:

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;
}