webForumDet fria alternativet

NHibernate.Linq med en array som in-parameter

.NETur .NET

4 svar · 765 visningar · startad av doggelito

doggelitoMedlem sedan juni 20003 076 inlägg
#1

Hej,
Jag vill hämta användare som tillhör vissa roller. Hur får jag in arrayen i selecten?
Typ så här vill jag ha:

public IEnumerable<User> GetUsers(string[] roles)
{
      var result = _session.Query<User>()
             .Fetch(x => x.Roles.[b]Where(y => y.Name in (roles))[/b]);
      return result;
}
SPiNMedlem sedan mars 20007 896 inlägg
#2

Möjligtvis:

public IEnumerable<User> GetUsers(string[] roles)
{
      var result = _session.Query<User>()
             .Fetch(x => x.Roles.Where([b]y => roles.Contains(y.Name)[/b]));
      return result;
}

Du får jämföra mot rätt property hos rollen dock, här gissade jag på Name ;)

doggelitoMedlem sedan juni 20003 076 inlägg
#3

Ett steg närmare! :)
Men nu blev det:
A fetch request must be a simple member access expression; 'x.Roles.Where(y => value(System.String[]).Contains(y.Name))' is a MethodCallExpressionN instead.

Får man inte sätta where-satsen inuti fetchen tro?

SPiNMedlem sedan mars 20007 896 inlägg
#4

Det låter som en riktig iaktagelse, ja :)

Nu kan jag vara ute på djupt vatten...

...
     .Fetch(x => x.Roles.Intersect(roles).Count > 0)
...
NickemannenMedlem sedan aug. 20003 575 inlägg
#5

Strunta i Fetch, den är ju till för hur du skall ladda listorna på objektet

var users = (from user in Session.Query<User> where roles.Intersect(user.Roles)).ToList()
125 ms totalt · 3 externa anrop · v20260731065814-full.b2af184d
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)