Расширение InRange Марка Гравелла из Linq-To-SQL - PullRequest
2 голосов
/ 23 января 2012

Я пытаюсь использовать расширение InRange, которое Марк Гравелл написал здесь:

LINQ Выражение для возврата значения свойства?

Это мой код:

// Fetch list of visit Ids and distinct Ips that fall into the date range
var q = (from c in db.tblTrackerVisits where c.Date >= MinDate select new { c.ID, c.IPID });
List<int> VisitIDs = q.Select(c => c.ID).ToList();
List<int> DistinctIPs = q.Select(c => c.IPID).Distinct().ToList();

// List of all campaigns that have visitors
var Campaigns = db.tblTrackerVariables
    .Where(c => 
        c.TypeID == Settings.CampaignTrackerVariableTypeID
        //&& db.tblTrackerVisitVariables.Any(d=>VisitIDs.Contains(d.VisitID) && d.VariableID == c.ID)
        && db.tblTrackerVisitVariables.InRange(x => x.VisitID, 1500, VisitIDs)
    )
    .Select(c => new { c.ID, c.Name }).OrderBy(c=>c.Name);

Однако это бросает:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<tblTrackerVisitVariable>' to 'bool'

Я не уверен, правильно ли я его использую, кто-нибудь может дать мне несколько советов? Закомментировано && над ним:

//&& db.tblTrackerVisitVariables.Any(d=>VisitIDs.Contains(d.VisitID) && d.VariableID == c.ID)

Это старый рабочий код (но он выдает ошибку слишком большого количества параметров, поэтому мне приходится прибегать к этому методу расширения).

1 Ответ

3 голосов
/ 23 января 2012

Метод расширения Марка возвращает IEnumerable, а не bool, и поэтому не может быть включен в логическое выражение.Если вы хотите проверить, не является ли результат не пустым, попробуйте метод Any:

db.tblTrackerVisitVariables.InRange(x => x.VisitID, 1500, VisitIDs).Any()
...