У linq to sql есть опция с связями? - PullRequest
3 голосов
/ 27 августа 2009

Я пытаюсь переместить следующий запрос в Linq-to-sql, возможно ли это?

select * from (
Select top (@Percent) percent with ties *
from(
    Select distinct
      LoanNumber as LoanNo
    From CHE 
    Left Join RecordingInfo as Rec
    On CHE.LoanNumber = Rec.LoanNo
    Where Channel = 'LINX'
        and CHE.Doc in ('MTG','MOD')
        and Rec.LoanNo is null
        and LoanNumber >= '@LoanNo'
) A
order by LoanNo @Order
) B
order by LoanNo

Я в любом случае не видел связи с linq.

1 Ответ

3 голосов
/ 28 августа 2009

Я думаю, что-то вроде этого будет работать для вас.

public static IQueryable<T> TopPercentWithTies<T, TKey>(this IOrderedQueryable<T> query, Expression<Func<T, TKey>> groupByExpression, double percent)
{
    var groupedQuery = query.GroupBy(groupByExpression);
    int numberToTake = groupedQuery.Count() * percent / 100;
    return groupedQuery.Take(numberToTake).SelectMany(t => t);
}

Я тестировал его только с IEnumerable, поэтому не уверен, что он будет работать правильно с IQueryable Я также отсортировал список перед вызовом TopPercentWithTies ().

Вот код, который я использовал для его проверки.

int percent = 50;
var people = new []
{
    new { Age = 99, Name = "Adam" },
    new { Age = 99, Name = "Andrew" },
    new { Age = 89, Name = "Bob" },
    new { Age = 50, Name = "Cecil" },
    new { Age = 50, Name = "Doug" },
    new { Age = 50, Name = "Everett" },
    new { Age = 35, Name = "Frank" },
    new { Age = 25, Name = "Greg" },
    new { Age = 15, Name = "Hank" }
};
var sortedPeople = people.AsQueryable().OrderByDescending(person => person.Age);
var results = sortedPeople.TopPercentWithTies(person => person.Age, percent);
foreach (var person in results)
    Console.WriteLine(person);

Надеюсь, это поможет или, по крайней мере, приведет вас в правильном направлении. Вы можете настроить логику для вычисления numberToTake.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...