2012-09-23 194 views
0

我遇到了與選擇的選擇的問題。Linq在實體框架中

選擇用戶標識的()中的select查詢不被IDE所喜歡。你如何在選擇中完成選擇?

Dim newctx As teckModel.teckEntities 
     Dim pending = From c In newctx.my_aspnet_membership Where c.userId = (From c In newctx.my_aspnet_usersinroles Where c.roleId = 8 Select c.userId) Select c.Email, c.CreationDate, c.LastLoginDate 

回答

1

等於運算假定一個值,但第二個LINQ語句返回一個IEnumerable。您應該在IEnumerable上使用.Contains()或者進一步優化子查詢以僅返回一個實體。

var pending = from x in newctx.my_aspnet_membership where 
    (from y in newctx.my_aspnet_usersinroles where y.roleId==8 select y.userId).Contains(x.userId) 
    select new { x.Email, x.CreationDate, x.LastLoginDate }; 
+0

謝謝。我想從另一個表中添加額外的選擇,其中來自該表的id等於用戶標識,我想從該表中捕獲該名稱。我如何嵌套,以便從先前的查詢中檢索4個值,名稱和三個值? – dinotom

+0

額外的問題是我應該從userid中獲取所有的字段,並且只使用我在gridview中需要的字段? – dinotom

+0

您可以使用'Join'來「嵌套」第二個表格,而不是使用子查詢。只要您只枚舉一次IEnumerable,這應該保持高效。 – lukiffer

1

您可以做一個ContainAny或者你將不得不使用FirstOrDefault

Where (From c In newctx.my_aspnet_usersinroles Where c.roleId = 8 Select c.userId).Contains(c.userId) 

c.userId == (From c In newctx.my_aspnet_usersinroles Where c.roleId = 8 Select c.userId).FirstOrDefault()