当我运行这个C#代码时,没有问题...但是当我将它翻译成VB.NET时,它会编译但由于'CompareString'成员不被允许在表达式中...我觉得我很遗憾这里的关键......
private void PrintButton_Click(object sender, EventArgs e)
{
if (ListsListBox.SelectedIndex > -1)
{
//Context
using (ClientOM.ClientContext ctx =
new ClientOM.ClientContext(UrlTextBox.Text))
{
//Get selected list
string listTitle = ListsListBox.SelectedItem.ToString();
ClientOM.Web site = ctx.Web;
ctx.Load(site,
s => s.Lists.Where(l => l.Title == listTitle));
ctx.ExecuteQuery();
ClientOM.List list = site.Lists[0];
//Get fields for this list
ctx.Load(list,
l => l.Fields.Where(f => f.Hidden == false
&& (f.CanBeDeleted == true || f.InternalName == "Title")));
ctx.ExecuteQuery();
//Get items for the list
ClientOM.ListItemCollection listItems = list.GetItems(
ClientOM.CamlQuery.CreateAllItemsQuery());
ctx.Load(listItems);
ctx.ExecuteQuery();
// DOCUMENT CREATION CODE GOES HERE
}
MessageBox.Show("Document Created!");
}
}
但是在VB.NET代码中这个错误是由于ctx.Load()方法中不允许'CompareString'成员...
Private Sub PrintButton_Click(sender As Object, e As EventArgs)
If ListsListBox.SelectedIndex > -1 Then
'Context
Using ctx As New ClientOM.ClientContext(UrlTextBox.Text)
'Get selected list
Dim listTitle As String = ListsListBox.SelectedItem.ToString()
Dim site As ClientOM.Web = ctx.Web
ctx.Load(site, Function(s) s.Lists.Where(Function(l) l.Title = listTitle))
ctx.ExecuteQuery()
Dim list As ClientOM.List = site.Lists(0)
'Get fields for this list
ctx.Load(list, Function(l) l.Fields.Where(Function(f) f.Hidden = False AndAlso (f.CanBeDeleted = True OrElse f.InternalName = "Title")))
ctx.ExecuteQuery()
'Get items for the list
Dim listItems As ClientOM.ListItemCollection = list.GetItems(ClientOM.CamlQuery.CreateAllItemsQuery())
ctx.Load(listItems)
' DOCUMENT CREATION CODE GOES HERE
ctx.ExecuteQuery()
End Using
MessageBox.Show("Document Created!")
End If
End Sub
答案 0 :(得分:2)
这可能是因为VB正在使用它自己的比较运算符实现,而不是字符串类中的实现,因此Load方法不能使用该表达式。
尝试使用Equals方法:
ctx.Load(site, Function(s) s.Lists.Where(Function(l) l.Title.Equals(listTitle)))
如果这不起作用,LINQ中的eq
运算符可用于表达式,但我必须查找VB语法。
答案 1 :(得分:1)
错误
使用通过比较操作查询SharePoint列表的LINQ VB.NET代码时出现未处理的例外情况: Microsoft.SharePoint.Client.ClientRequestException:The 'CompareString'成员不能在表达式中使用。
。
根据KB 2883454:
这个问题的原因是在VB.NET中,表达式为:
s = "abc"
转换为表达式:
0 == Microsoft.VisualBasic.CompilerServices.Operators.CompareString(s, "abc", true)
。
支持 目前没有解决方法,但解决方法是 在C#.NET模块中编译上述逻辑并在VB.NET中使用它 代码。