SPMETAL を使用して C# ファイルを生成し、LINQ を使用して Sharepoint オブジェクトにアクセスできるようにしました。
ただし、非常に単純なクエリを使用すると、奇妙なエラーが発生します。
指定されたキャストは無効です。
スタック トレース:
Set__zleceniaTrigger(Object , Object ) で Microsoft.SharePoint.Linq.StaticPropertyMap.SetToEntity(Object entity, Object value) で Microsoft.SharePoint.Linq.SPItemMappingInfo.MaterializeEntity[TEntity](DataContext dc, SPDataList list, SPListItem item, System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext() at System.Collections.Generic.List
1..ctor(IEnumerableの lambda_method(ExecutionScope 、 SPListItem ) で SPItemMappingInfo itemMappingInfo、JoinPath joinPath)1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 ソース) C:\XXXXXXXXX\QuickModify\Program.cs: 42 行目の QuickModify.Program.Main(String[] args) at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at 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 製品で初めての本物のバグを見つけたのでしょうか、それとも (もっと可能性が高いのは) 何か間違ったことをしているのですか?