关于.net:C#/ Compact Framework 2.0 /列表查询错误

C# / Compact Framework 2.0 / List query error

好的,我有:

1
2
3
4
5
6
7
8
9
10
11
12
var filteredItems = lstAllItems.Where(item => item.Parent.ID == parentId);

TreeNode childNode;
    foreach (var i in filteredItems.ToList())
    {
        if (parentNode == null)
            childNode = tvwPickList.Nodes.Add(i.Text);
        else
            childNode = parentNode.Nodes.Add(i.Text);

        RefreshPickList(i.ID, childNode);
    }

这给我带来了一些错误:

警告1对类型"System.Runtime.Serialization.SerializationInfo"的引用声称它是在"C:Program Files(x86)Microsoft.NETSDKCompactFrameworkv2.0WindowsCEmscorlib.dll"中定义的,但找不到它C:Program Files(x86)
eference AssembliesMicrosoftFrameworkv3.5System.Data.DataSetextensions.dll IMSCF

错误2在未引用的程序集中定义了类型"System.Data.DataTable"。必须添加对程序集"system.data,version=2.0.0.0,culture=neutral,publickeytoken=b7a5c561934e089"的引用。c:datac imscfimscffrmpicklist.cs 52 13 imscf

错误3在未引用的程序集中定义了类型"System.Data.DataRow"。必须添加对程序集"system.data,version=2.0.0.0,culture=neutral,publickeytoken=b7a5c561934e089"的引用。c:datac imscfimscffrmpicklist.cs 52 13 imscf

最后两个错误突出显示了"var"关键字。

我对C和.NET CF非常陌生,所以我不知道我在这里做错了什么;代码是根据我在某个C网站上找到的东西改编的。

有趣的是,这些引用确实存在于我的项目中…所有正确的使用语句都在那里等等…

这里是否有.NET CF不支持的内容(它正在成为这个项目中的一个循环主题:p)

事先谢谢。


您使用的是.NET CF 3.5的功能。你的标题说你正在使用.NET CF 2.0。这就是你的问题所在。

更具体地说:

  • Where方法是LINQ的一部分。Linq与.NET CF 3.5一起引入。
  • lamba表达式需要.NET CF 3.5
  • 另外,var关键字不是.NET 2.0的一部分。
  • 所以:要么使用.NET CF3.5(推荐),要么只使用2.0可以处理的。

    (也许有一种技术上更好的说法,但归根结底是2.0对3.5)

    编辑:如何升级到3.5:在Visual Studio 2008中,从菜单中选择"项目",单击"升级项目",然后单击"是"。应该就是这样。


    也许你有一个类库和Windows Mobile应用程序?

    如果是,您是否检查过使用正确的Visual Studio模板创建类库?

    您需要使用已安装的移动Visual Studio模板创建此类类库,因为您似乎使用了常规的C类库1,它添加了在CF中不需要的名称空间。

    您可以检查的另一件事是,您的Windows Mobile窗体项目可能是CF 3.5,而类库是2.0。转到两个项目属性并检查目标框架是否相等(您将使用CF 3.5!!!)