Linq-To-SQL Marc Gravell's InRange Extension

本文关键字:InRange Extension Marc Gravell Linq-To-SQL | 更新日期: 2023-09-27 18:21:04

我正在字符串中使用InRange扩展Marc Gravell在这里写道:

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'

我不确定我是否正确使用了它,有人能给我一些建议吗?被评论掉的&amp;上方:

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

是旧的工作代码(但它抛出了太多params错误,所以我不得不求助于这个扩展方法)。

Linq-To-SQL Marc Gravell's InRange Extension

Mark的扩展方法返回IEnumerable,而不是bool,因此不能包含在逻辑表达式中。如果你想检查结果是否为非空,请尝试Any方法:

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