0

我刚刚开始学习 C# 5 (.net 4.5) 并且正在转换现有的 VB.Net Silverlight 4 业务应用程序,但我正在努力转换下面的 Vb.Net 域服务方法。

它没有编译给我“无效的表达式术语'return'”和“预期的contectual keywork 'by'”例外。

你能不能给我一些指导。

模型

在此处输入图像描述

VB

Public Function GetBusinessUnits() As IQueryable(Of BusinessUnit)

    Dim var1 = From cat In ObjectContext.CabSystemsModelCategories
                Group cat By cat.BUID Into Group
                Select BUID

    Return ObjectContext.BusinessUnits.Include("CabSystemsModelCategories").
                        Where(Function(w) var1.Contains(w.ID)).
                        OrderBy(Function(o) o.ID)

End Function

C# 到目前为止(不工作)

public IQueryable<BusinessUnit> GetBusinessUnits()
{

        object var1 = from cat in ObjectContext.CabSystemsModelCategories
                    group cat by cat.BUID into group

        return ObjectContext.BusinessUnits.Include("CabSystemsModelCategories").
            Where((w) => var1.Contains(w.ID)).
            OrderBy((o) => o.ID);

}

编辑

更改代码以包含选择会产生一个额外的异常“无效的表达式术语'选择'”

var result = from cat in ObjectContext.CabSystemsModelCategories
                    group cat by cat.BUID into group select BUID
4

3 回答 3

1

您正在分组为“组”,这是 C# 中的保留字。尝试这个:

var result = from cat
             in ObjectContext.CabSystemsModelCategories
             group cat by cat.BUID
             into grouping
             select grouping;
于 2012-09-27T09:56:26.087 回答
0

好的,这是工作方法。

public IQueryable<BusinessUnit> GetBusinessUnits()
{
    var includedBU = from cat in ObjectContext.CabSystemsModelCategories
                                group cat by cat.BUID into grouping
                                select grouping.Key;

    return ObjectContext.BusinessUnits.Include("CabSystemsModelCategories").
            Where((w) => includedBU.Contains(w.ID)).
            OrderBy((o) => o.ID);

}
于 2012-09-27T13:11:01.820 回答
0

在您的 C# 示例中,您Select BUID在设置时永远不会,var1否则它们是等效的。

您使用的是哪个版本的 C#?您可能应该声明var1var而不是Object

于 2012-09-27T09:33:56.467 回答