LINQ to Entities, эмулирующий SQL «IN», действующий как int [] - PullRequest
0 голосов
/ 23 мая 2011

Ладно ... я рассматривал большинство тем, относящихся к L2E, и что-то похожее на оператор IN SQL, и хотя то, что я видел в процессе обучения, не сильно приближает меня к решению проблемы.

Я знаю, что с EF4 доступен .Contains.Вот пример того, который я уже использую, который работает как чемпион для фильтрации на основе строкового массива:

public static IQueryable<TblIssueDetail> FilterByIssueName(this IQueryable<TblIssueDetail> source, string[] issueName)
{
    if (null != issueName)
        source = issueName.Aggregate(source, (current, word) => current.Where(x => x.IssueName.Contains(word)));
    return source;
}

Однако, когда я пробую подобную технику с int [], он падает наего лицо.

public static IQueryable<TblIssueDetail> FilterByProviderAffected(this IQueryable<TblIssueDetail> source, int[] providerAffected)
{
    if (null != providerAffected)
        source = providerAffected.Aggregate(source,
                                            (current, item) =>
                                            current.Where(x => x.ProviderAffected.Equals(item)));
    return source;
}

Что я получаю при отладке: «Невозможно создать постоянное значение типа« System.Object ». Только примитивные типы (« такие как Int32, String и Guid ») поддерживаются в этом контексте. "когда я нажимаю на фильтр с int [] в нем.

Я просто упускаю что-то глупое и очевидное, или я, кстати, слишком далеко от базы?

1 Ответ

1 голос
/ 23 мая 2011

Вы, вероятно, хотите позвонить .Contains, а не .Equals.

...