EntityFramework - contains query of composite key

前端 未结 7 1588
渐次进展
渐次进展 2020-11-22 06:06

given a list of ids, I can query all relevant rows by:

context.Table.Where(q => listOfIds.Contains(q.Id));

But how do you achieve the sa

7条回答
  •  Happy的楠姐
    2020-11-22 06:46

    I tried this solution and it worked with me and the output query was perfect without any parameters

    using LinqKit; // nuget     
       var customField_Ids = customFields?.Select(t => new CustomFieldKey { Id = t.Id, TicketId = t.TicketId }).ToList();
    
        var uniqueIds1 = customField_Ids.Select(cf => cf.Id).Distinct().ToList();
        var uniqueIds2 = customField_Ids.Select(cf => cf.TicketId).Distinct().ToList();
        var predicate = PredicateBuilder.New(false); //LinqKit
        var lambdas = new List>>();
        foreach (var cfKey in customField_Ids)
        {
            var id = uniqueIds1.Where(uid => uid == cfKey.Id).Take(1).ToList();
            var ticketId = uniqueIds2.Where(uid => uid == cfKey.TicketId).Take(1).ToList();
            lambdas.Add(t => id.Contains(t.Id) && ticketId.Contains(t.TicketId));
        }
    
        predicate = AggregateExtensions.AggregateBalanced(lambdas.ToArray(), (expr1, expr2) =>
         {
             var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast());
             return Expression.Lambda>
                   (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
         });
    
    
        var modifiedCustomField_Ids = repository.GetTable()
             .Select(cf => new CustomFieldKey() { Id = cf.Id, TicketId = cf.TicketId }).Where(predicate).ToArray();
    

提交回复
热议问题