每当标记参数不为空时,我都会收到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
});
}
我知道可能无法按照我的方式去做。如果不可能,任何人都可以提供任何替代方案吗?
答案 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()的无参数版本。