使用SPMETAL我生成了一个C#文件,允许我使用LINQ访问Sharepoint对象。指定的转换无效查询Sharepoint
然而,使用非常简单的查询产生一个奇怪的错误:
Specified cast is not valid.
Stack trace:
at Set__zleceniaTrigger(Object , Object) at Microsoft.SharePoint.Linq.StaticPropertyMap.SetToEntity(Object entity, Object value) at Microsoft.SharePoint.Linq.SPItemMappingInfo.MaterializeEntity[TEntity](DataContext dc, SPDataList list, SPListItem item, SPItemMappingInfo itemMappingInfo, JoinPath joinPath) at lambda_method(ExecutionScope , SPListItem) at System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Collections.Generic.List
1..ctor(IEnumerable1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 source) at QuickModify.Program.Main(String[] args) in C:\XXXXXXXXX\QuickModify\Program.cs:line 42 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()
查询本身是这样的:
SPEntitiesDataContext ctx = new SPEntitiesDataContext("http://localhost:1080");
var tasks = ctx.Zlecenia.ToList();
当然,这还不是最优化的查询,但其中一个在只过滤所需记录的地方也会返回相同的错误。
我发现我可以用.Select(z => new ZlecenieItem(){ ColumnName = z.ColumnName, ... })
选择特定的列,不过我不能用它来选择查找列,我收到以下错误,那么(即使我只选择一列这样):
The query uses unsupported elements, such as references to more than one list, or the projection of a complete entity by using EntityRef/EntitySet.
这是有问题的,因为有时我需要从其他列表中获取值,并且使用查找值会很好。
我刚刚在MS产品中发现了我的第一个真正的错误,或者(我觉得更有可能)我做错了什么?
插入你的代码 – 2010-11-09 16:30:58
我会看看使用SPQuery对象,然后一旦你有了你的结果,使用LINQ进一步过滤 – Mauro 2010-11-09 16:46:17
要回答这两个意见:a)如果这个基本查询失败,你真的认为包含.Where子句的查询可能是问题?如果是这样,那么我会张贴更大的东西,但我真的不认为这是必要的。 b)我宁愿避免SPQuery;我使用LINQ的全部原因是为了避免编写那些恶意的CAML文件。 ;) – Shaamaan 2010-11-10 08:09:22