【问题标题】:Specified cast is not valid querying Sharepoint指定的演员在查询 Sharepoint 时无效
【发布时间】:2010-11-25 22:30:22
【问题描述】:

使用 SPMETAL,我生成了一个 C# 文件,允许我使用 LINQ 访问 Sharepoint 对象。

然而,使用一个非常简单的查询会产生一个奇怪的错误:

指定的转换无效。

堆栈跟踪:
在 Set__zleceniaTrigger(对象,对象) 在 Microsoft.SharePoint.Linq.StaticPropertyMap.SetToEntity(对象实体,对象值) 在 Microsoft.SharePoint.Linq.SPItemMappingInfo.MaterializeEntity[TEntity](DataContext dc,SPDataList 列表,SPListItem 项,SPItemMappingInfo itemMappingInfo,JoinPath joinPath) 在 lambda_method(ExecutionScope , SPListItem ) 在 System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable1 源) 在 C:\XXXXXXXXX\QuickModify\Program.cs:line 42 中的 QuickModify.Program.Main(String[] args) 在 System.AppDomain._nExecuteAssembly(程序集程序集,字符串 [] 参数) 在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在 System.Threading.ThreadHelper.ThreadStart()

查询本身如下所示:

SPEntitiesDataContext ctx = new SPEntitiesDataContext("http://localhost:1080");  
var tasks = ctx.Zlecenia.ToList();

当然,这不是最佳查询,但使用 .Where 仅过滤所需记录的查询也会返回相同的错误。

我发现我可以使用.Select(z => new ZlecenieItem(){ ColumnName = z.ColumnName, ... }) 选择特定列,但是我不能使用它来选择查找列,因为我收到以下错误(即使我以这种方式只选择了一个列):

查询使用了不受支持的元素,例如对多个列表的引用,或使用 EntityRef/EntitySet 对完整实体的投影。

这是有问题的,因为有时我需要从其他列表中获取值,使用查找值会很好。

我是否刚刚在 MS 产品中发现了我的第一个真正的错误,或者(感觉更有可能)我做错了什么?

【问题讨论】:

  • 我会考虑改用 SPQuery 对象,然后在得到结果后,使用 LINQ 进一步过滤它
  • 回答两个 cmets:a) 如果此基本查询失败,您真的认为包含 .Where 子句的查询可能是问题所在吗?如果是这样,那么我会发布更大的东西,但老实说,我认为没有必要。 b) 我宁愿避免使用 SPQuery;我使用 LINQ 的全部原因是避免编写那些该死的 CAML 文件。 ;)

标签: c# visual-studio-2008 sharepoint-2010 linq-to-sharepoint


【解决方案1】:

虽然我仍然不确定为什么上述方法不起作用,但我设法通过向 SPmetal 添加自定义配置文件来生成引用来解决问题。

这表明默认的 SPmetal 配置可能并不总是有效。

【讨论】:

  • 您是否还记得您需要在配置文件中放入哪些设置?突然间,我所有的金属物体都停止了工作,这就是我得到的确切错误。
  • 我已经强制 SPMetal 只为那些我真正需要的 SP 列表生成类,然后我将这些类限制为只包含最基本的属性。因此,我在代码中不需要的任何属性(由 SP 工作流使用或对其他列表的引用)都被省略了。
猜你喜欢
  • 1970-01-01
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
相关资源
最近更新 更多