【发布时间】: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