我可以在OneLiner中转换这两个LINQ语句(C#)

我有那些陈述,检查我是否在网格中有所有答案.每行由ContextYID标识.

我想知道我是否可以组合这些LinQ查询并将其直接转换为True / False语句.

int nbrow = Answers.Where(a => a.FieldId == result.Id && a.FieldYId == fieldYAxi.Id)
                   .Select(a => a.ContextYId)
                   .distinct()
                   .Count();

int nbAnswer = Answers.Count(a =>
a.FieldId == result.Id &&
a.FieldXId == fieldXAxi.Id &&
a.FieldYId == fieldYAxi.Id);

if (nbAnswer != nbrow)
    return false;
else
    return true;

解决方法

我认为这是一个改进,因为FieldId和FieldYID只需要比较一次,我将你的return语句简化为一行.

var matchingAnswers = Answers.Where(a => a.FieldId == result.Id
                                      && a.FieldYId == fieldYAxi.Id).ToList();
int nbrow = matchingAnswers
                .Select(a => a.ContextYId)
                .distinct()
                .Count();
int nbAnswer = matchingAnswers.Count(a => a.FieldXId == fieldXAxi.Id);
return nbAnswer == nbrow;

如果您愿意,可以通过合并最后几行来缩短它:

var matchingAnswers = Answers.Where(a => a.FieldId == result.Id
                                      && a.FieldYId == fieldYAxi.Id).ToList();
return matchingAnswers.Count(a => a.FieldXId == fieldXAxi.Id) ==
       matchingAnswers.Select(a => a.ContextYId).distinct().Count();

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...