Linq Intersect(...)。Where子句中的Any()抛出NotSupportedException

时间:2009-05-05 02:13:52

标签: c# linq-to-sql asp.net-ajax

每当标记参数不为空时,我都会收到NotSupportedException: 除了之外,本地序列不能用于查询运算符的LINQ to SQL实现  包含()运算符。

[WebMethod]
public static object GetAnswersForSurvey(string surveyName, int? surveyYear, IEnumerable<string> tags, IEnumerable<string> benchmarks)
{
    IQueryable<DAL.Answer> results = new DataClassesDataContext().Answers
                                            .OrderBy(a => a.Question.Variable);

    if (!String.IsNullOrEmpty(surveyName)) results = results.Where(a => a.Survey.Name == surveyName);
    if (surveyYear.HasValue) results = results.Where(a => a.Survey.Year == surveyYear.Value);
    if (tags.Any()) results = results.Where(answer => answer.Question.Tags.Select(t => t.Label).Intersect(tags).Any());
    if (benchmarks.Any()) results = results.Where(answer => benchmarks.Contains(answer.Question.BenchmarkCode));

    return results.Select(a => new {
        a.Question.Wording,
        a.Demographic,
        Benchmark = a.Question.BenchmarkCode,
        a.Question.Scale,
        a.Mean,
        a.MEPMean,
        a.NSSEMean
    });
}

我知道可能无法按照我的方式去做。如果不可能,任何人都可以提供任何替代方案吗?

2 个答案:

答案 0 :(得分:3)

Linq to SQL中有许多通用的Linq to Object方法。

http://msdn.microsoft.com/en-us/library/bb399342.aspx

另一种方法可能是针对sql完成几个子查询,然后执行你的交叉操作作为Linq to Objects

答案 1 :(得分:0)

我认为原因是System.Data.Linq.Table.Intersect的实现返回一个IEnumerable,而IEnumerable又没有实现Any()的无参数版本。