Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取SharePoint中具有多个值的查找字段?_C#_.net_Wcf_Sharepoint_Moss - Fatal编程技术网

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

C# 如何读取SharePoint中具有多个值的查找字段?,c#,.net,wcf,sharepoint,moss,C#,.net,Wcf,Sharepoint,Moss,嗨,谢谢你的关注 背景 我继承了一个基于SharePoint 2007的旧.NET项目,并设计了一个外部核心库,该库只访问SP数据,因此SP只是一个后端。是的,我知道最好迁移到SQL,但客户不同意 以前的开发人员使用简单的读取方法读取SP列表中的数据: SPList list = CurrentRootWeb.Lists["SomeListName"]; 然后他们通过排序字典访问列表属性(即,对于列表中的每个项目,获取项目[“SomeValue”]) 我不擅长Share

嗨,谢谢你的关注

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

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

  SPList list = CurrentRootWeb.Lists["SomeListName"];
然后他们通过排序字典访问列表属性(即,对于列表中的每个项目,获取项目[“SomeValue”])

我不擅长SharePoint,因此我不知道这是否是访问其数据的最有效方式

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

他们请求的每个属性似乎都需要一个字符串作为回报。所以
item[SomeString]
是可以的,但是
item[SomeList]
让一切都变得恶心!我原以为多值查找列表列是以序列化或分隔字符串的形式出现的,其中包含选定的值(例如:“红色;蓝色;绿色”)。我错过了什么


谢谢

对于列表字段中的每个
SPField
s,您需要测试字段的
类型


如果类型为
SPFieldType.MultiChoice
,则您可以将
SPField
强制转换为
SPFieldChoice
并访问
Choices
集合,这是一个
StringCollection

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

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>();


 }
item.Fields[“LookFieldName”].Type==SPFieldType.Lookup;
SPFieldLookup LookUpField=项。字段[“LookFieldName”]作为SPFieldLookup;
if(LookUpField.AllowMultipleValues)
{
SPFieldLookupValueCollection valueCollection=项[Field.Id]作为SPFieldLookupValueCollection;
字符串[]arrLookupValues=(从valueCollection中的SPFieldLookupValue val选择val.LookupValue).ToArray();
}

谢谢您的技术支持!谈到SharePoint,我非常不称职——你能告诉我如何测试代码中的类型吗?除非你知道,不要引用任何东西。谢谢这将取决于您访问字段的方式。我假设您的代码正在执行类似于foreach(list.Fields中字段的SPField)的操作;如果是这样,那么您可以说:如果(oField.Type==SPFieldType.MultiChoice)作为一名sharepoint开发新手,这个答案非常有用,而且很难找到。还感谢您为SPLinq提供了一个很好的例子。