LINQ WHERE基于与结果集中其他元素的比较

时间:2016-03-24 20:02:37

标签: c# linq

我的查询看起来非常类似于以下内容:

var query = plans
.Where(p => 
        p.IsOptOut ||
        (p.PropertyType == PropertyType.Property1 && p.SomeCollection.Count > 0))
.Select(p =>
        new CustomClass
        {
            Id = p.Id,
            PropertyType = p.PropertyType,
            IsOptOut = p.IsOptOut
        });

因此,我们从plans中选择IsOptOut为真的任何记录,或p.PropertyType为特定值且p.SomeCollection至少有一条记录。

这会使自己成为可能的结果集,如下所示:

Id          PropertyType          IsOptOut
1           Foo                   true
2           Foo                   false
3           Foo                   false
4           Bar                   true
5           Baz                   true
6           Baz                   false

如何修改LINQ查询,以便WHERE子句可以将当前记录与plans集合中的其他记录进行比较,并排除IsOptOut为true的所有记录,并且它是唯一返回的记录对于给定的属性类型。

在上面的示例中,ID#4应该从结果集中排除,因为IsOptOut为true,并且" Bar"的PropertyType的结果集中没有其他记录。

作为旁注,如果IsOptOut为真,则SomeCollection中不会有记录,这是一项商业规则。

1 个答案:

答案 0 :(得分:1)

您不能直接在同一个 var gulp = require('gulp'); var sass = require('gulp-sass'); var browserSync = require('browser-sync').create(); var prefix = require('gulp-autoprefixer'); var rename = require('gulp-rename'); var sourcemaps = require('gulp-sourcemaps'); var cssclean = require('gulp-clean-css'); // create sass tasks gulp.task('sass', function () { return gulp.src('assets/scss/test.scss') .pipe(sourcemaps.init()) .pipe(sass()) .pipe(rename({ suffix: '.min' })) .pipe(cssclean()) .pipe(prefix("last 2 versions", "> 1%", "ie 8", "Android 2", "Firefox ESR")) .pipe(sourcemaps.write('')) .pipe(gulp.dest('assets/styles')) .pipe(browserSync.stream({ match: '**/*.css' })) .on('error', function (err) { console.error('Error!', err.message); }); }); gulp.task('serve', ['sass'], function () { browserSync.init({ proxy: "localhost/portfolio2014", open: false }); gulp.watch("assets/scss/**/*.scss", ['sass']); gulp.watch(["assets/styles/*.css", "assets/javascript/*.js"]).on('change', browserSync.reload); }); // default task (just run gulp) gulp.task('default', ['serve']); 子句中执行此操作,但可以使用类似的内容(请参阅注释):

Where