힐로,엔티티 프레임 워크 V1은 엔티티에 PredicateBuilder, Linq에이 방법을
내가 개체를 필터링해야 다음 코드를 해결하지 못했습니다. 코드의 절반은 일종의 '서브 필터'를 얻기 위해 코드를 리팩터링하려고합니다.
public static IQueryable<User> WithGroups(this IQueryable<User> users, params string[] groups)
{
if (groups != null && groups.Length > 0)
{
var outer = PredicateBuilder.True<User>();
var inner = PredicateBuilder.False<Group>();
foreach (string group in groups)
{
string g1 = group;
inner = inner.Or(g => g.Name == g1);
}
outer = outer.And(u => u.Groups.Where(inner.Compile()).Any());
users = users.Where(outer);
}
return users;
}
내가 지금에 필터를 만들려고 해요 :
var result = ctx.GetUsers().WithGroups("Administrators","Users").ToList();
WithGroups 작동 다음과 같이 정의되어있다 :
는 기본적으로 나는 사용자 개체 모음을 필터링하려면 다음 호출을 "WithGroups"내에서 호출하여 더 나은 코드를 얻을 수있는 "WithNames"라는 엔티티를 그룹화합니다.
public static IQueryable<User> WithGroups(this IQueryable<User> users, params string[] groups)
{
if (groups != null && groups.Length > 0)
{
var inner = PredicateBuilder.False<User>();
inner = inner.And(u => u.Groups.AsQueryable().AsExpandable().WithNames(groups).Any());
users = users.Where(inner.Expand());
}
returnh users;
}
"WithNames"을 모르는 Linq에 있기 때문에 엔티티에 작동하지 않는
public static IQueryable<Group> WithNames(this IQueryable<Group> groups, params string[] names)
{
if (names != null && names.Length > 0)
{
var outer = PredicateBuilder.True<Group>();
var inner = PredicateBuilder.False<Group>();
foreach (var name in names)
{
string _n = name;
inner = inner.Or(g => g.Name == _n);
}
groups = groups.Where(outer.And(inner.Expand()));
}
return groups;
}
var test = ctx.GetGroups().WithNames("Administrators").ToList();
내가 이것 (그리고 몇몇 다른 사람을) 시도 : 직접 호출 할 때, 어떤 작품과 같이 정의된다
아마도 누군가 나를 해결할 수 있습니다. 이 문제를 해결할 방법을 찾을 수있는 더 이상 아이디어가 없습니다.
들으
감사합니다. 작동하지만 현재 저장소 구조에 맞지 않습니다. WithXY 메서드를 IQueryable 반환합니다.하지만 ac와 함께 작동하는 솔루션을 확인 해요. riteria 개체입니다. 그래서 다음과 같은 쿼리를 작성합니다 :'repo.GetUsers (c => c.WithGroup ("Administrators")) .ToList()'Cirteria 객체는 표현식을 연결합니다. –