0

使用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.WhereSelectEnumerableIterator 2.MoveNext() at System.Collections.Generic.List 1..ctor(IEnumerable 1 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产品中发现了我的第一个真正的错误,或者(我觉得更有可能)我做错了什么?

+0

插入你的代码 – 2010-11-09 16:30:58

+0

我会看看使用SPQuery对象,然后一旦你有了你的结果,使用LINQ进一步过滤 – Mauro 2010-11-09 16:46:17

+0

要回答这两个意见:a)如果这个基本查询失败,你真的认为包含.Where子句的查询可能是问题?如果是这样,那么我会张贴更大的东西,但我真的不认为这是必要的。 b)我宁愿避免SPQuery;我使用LINQ的全部原因是为了避免编写那些恶意的CAML文件。 ;) – Shaamaan 2010-11-10 08:09:22

回答

1

尽管我仍然不确定上述原因,但我仍然设法通过向SPmetal添加一个自定义配置文件来解决问题,以生成引用。

这表明默认的SPmetal配置可能无法正常工作。

+0

你会记得你需要把什么设置放在配置文件中吗?突然间,我所有的金属物体都停止工作,这是我得到的确切错误。 – CMN 2011-01-13 00:09:23

+0

我强制SPMetal只为那些实际需要的SP列表生成类,然后限制这些类只包含最基本的属性。因为我在代码中不需要使用的任何属性(由SP工作流程使用,或者是对其他列表的引用),因此省略。 – Shaamaan 2011-06-14 13:30:00

相关问题