2012-01-25 20 views
10
Müşteri Noktası Modeli'nden bir sonuç elde etmek için LINQ kullanmaya çalışıyorum.

İstemci Nesnesi üzerinde Linq Kullanmak

var rolesAssignments = context.Web.RoleAssignments; 
context.Load(rolesAssignments, 
    roles => roles.IncludeWithDefaultProperties(role => role.Member, 
    role => role.RoleDefinitionBindings)); 
context.ExecuteQuery(); 
var hasAdmin = rolesAssignments.Select(x => x.RoleDefinitionBindings.Cast<RoleDefinition>().Select(y => y.RoleTypeKind == RoleType.Administrator)).Any(); 

alıyorum:

{System.NotSupportedException: Sorgu yürütme Geçersiz kullanımını. Sorgu, istemci içerik nesnesinde ExecuteQuery yöntemi kullanılarak gerçekleştirilmelidir.

Ancak, bunu bir iç içe foreach döngüsünü kullanmak için yeniden yazdığımda, düzgün çalışıyor.

Linq sorgumdan görebildiğim kadarıyla, yüklü olmayan hiçbir özelliği kullanmam.

cevap

3

Bu, başımın tepesinden başka bir şey değil, ama size fikir vermeli. Sorgudaki Herhangi birinin kullanımıyla ilgili şikayette bulunabilirsiniz. Eğer öyleyse kaldırın ve ExecuteQuery tamamlandıktan sonra hasAdmin.Any() işaretleyin.

+0

Ben de hata var. var query = folders.Select (f => f.Name == klasörü) .First() Nasıl denerim? Cevabını anlamıyorum. – kevin

15

Nekroposting için özür dilerim, ama sadece bu sorunu yaşadım ve burada bir cevap bulamadık. Linq sorgularınızın başarısız olmasının nedeni, istemci modeli koleksiyonlarının çoklu yineleyicileri gerçekleştirmesidir. Ve rollerinizi numaralandırmayı denediğinizde, IQueryable<T> uzantı yöntemlerini çağırırsınız. Bu yöntemler (varsayalım), bazı kapsüllenmiş sabun çağrıları yoluyla sunucudan veri çekmek için tasarlanmış ve istemcide kullanılmamalıdır. Istead, açıkça, IEnumerable<T> uzantı yöntemlerini kullanmalısınız.

var hasAdmin = rolesAssignments.Select(predicate); 

Ve bu çalışacaktır: Yani, bu işe yaramaz bu çalıştığımızda

var hasAdmin = ((IEnumerable<RoleAssignment>)rolesAssignments).Select(predicate); 
+0

Bu projeden uzun bir süre uzak kaldım, bu yüzden doğrulama şansım yok. Dürüst olmak gerekirse ne yaptığımı da hatırlayamıyorum. Ekstra bilgi için teşekkürler. – ruffen

+2

güzel. çok teşekkürler! kesinlikle değersiz! – Nacht

+1

Sorunumuz da düzeltildi. Teşekkürler! –

İlgili konular