【问题标题】:How do I read LookUp fields with multiple values in SharePoint?如何在 SharePoint 中读取具有多个值的查找字段?
【发布时间】:2011-12-06 03:20:20
【问题描述】:

您好,感谢您的关注!

背景

我继承了一个基于 SharePoint 2007 的旧 .NET 项目,并设计了仅访问 SP 数据的外部核心库,因此使 SP 只是一个后端。是的,我知道迁移到SQL会更好,但是客户不同意。

以前的开发者使用简单的read方法来读取SP列表中的数据:

  SPList list = CurrentRootWeb.Lists["SomeListName"];

然后他们通过各种字典访问列表属性(即,对于列表中的每个项目,获取 item["SomeValue"])。

我不熟悉 SharePoint,所以我不知道这是否是访问其数据的最有效方式。

问题

如何在 SharePoint 中读取具有多个值的查找字段?

他们请求的每个属性似乎都需要一个字符串作为回报。所以item[SomeString] 没问题,但是item[SomeList] 让一切都变得糟糕!我会认为多值查找列表列以序列化或分隔字符串的形式出现,其中包含所选值(例如:“red;blue;green”)。我错过了什么?

谢谢!

【问题讨论】:

    标签: c# .net wcf sharepoint moss


    【解决方案1】:

    如果您对具有多个值的查找字段特别感兴趣,而不仅仅是 MultiChoice 字段,那么以下代码应该会有所帮助:

    item.Fields["LookFieldName"].Type == SPFieldType.Lookup;
    SPFieldLookup LookUpField = item.Fields["LookFieldName"] as SPFieldLookup;
    if (LookUpField.AllowMultipleValues)
    {
        SPFieldLookupValueCollection valueCollection = item[Field.Id] as SPFieldLookupValueCollection;
    
        string[] arrLookupValues = (from SPFieldLookupValue val in valueCollection select val.LookupValue).ToArray<string>();
    
    
     }
    

    【讨论】:

    • 作为一个新手共享点开发人员,这个答案非常有帮助,而且很难找到。也感谢您提供了 SPLinq 的一个很好的例子。
    【解决方案2】:

    对于列表字段中的每个SPFields,您需要测试该字段的Type

    如果类型为SPFieldType.MultiChoice,则将SPField 强制转换为SPFieldChoice 并访问Choices 集合,即StringCollection

    【讨论】:

    • 感谢主管技术!在 SharePoint 方面,我非常不称职 - 你能告诉我如何测试代码中的类型吗?只有当你知道而不参考任何东西时。谢谢!
    • 这将取决于您如何访问这些字段。我假设您的代码正在执行类似 foreach 的操作(SPField oField in list.Fields);如果是这样,那么你可以说:if (oField.Type == SPFieldType.MultiChoice)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多