You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# LINQ查询使用条件语句:合并两类查询的可行性问询

当然可以合并成一个查询!

完全没必要分开判断成员数量再执行不同的查询,我们可以利用LINQ的条件表达式直接在一个查询里完成逻辑判断,一次性返回对应的名称。

合并后的查询代码:

var result = await db.ExpertCommittees
    .Where(f => f.Id == committeeId)
    .Select(f => f.ExpertCommitteeMembers.Count > 1 
        ? f.ExpertCommitteeMembers.FirstOrDefault(m => m.IsCommitteeHead)?.Expert.FullName
        : f.ExpertCommitteeMembers.FirstOrDefault()?.Expert.FullName)
    .FirstOrDefaultAsync();

逻辑解释:

  • 我们在Select里使用了三元运算符(?:)来做条件判断:
    • 当委员会成员数大于1时,就筛选出IsCommitteeHead为true的成员,取其全名;
    • 当成员数等于1时,直接取唯一的那个成员的全名;
  • 这里用了?.空传播操作符,避免因为找不到对应成员(比如成员数大于1但没有设置负责人)导致的NullReferenceException,如果出现这种情况会返回null;
  • 整个查询只需要访问数据库一次,比分开两次查询更高效。

额外优化建议(覆盖边界场景):

如果担心成员数为0的情况(你的原查询没处理这个场景),可以用C# 8.0+的switch表达式让逻辑更清晰:

var result = await db.ExpertCommittees
    .Where(f => f.Id == committeeId)
    .Select(f => f.ExpertCommitteeMembers.Count switch
    {
        0 => null,
        1 => f.ExpertCommitteeMembers.First().Expert.FullName,
        _ => f.ExpertCommitteeMembers.FirstOrDefault(m => m.IsCommitteeHead)?.Expert.FullName
    })
    .FirstOrDefaultAsync();

内容的提问来源于stack exchange,提问作者Tomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 08:02:45