C# 基于Linq查询匹配双字段并返回一维匹配结果列表的实现问题
方案1:单条记录仅返回1个匹配值(优先匹配oldNumber)
如果单条记录同时匹配两个字段时,只需要返回oldNumber,直接在Select中做条件判断即可,得到的直接是一维数组:
// 注意异步方法ToArrayAsync需要搭配await调用 var resultNumbers = await context.Numbers .Where(n => requestNumbers.Contains(n.oldNumber) || requestNumbers.Contains(n.newNumber)) .Select(n => requestNumbers.Contains(n.oldNumber) ? n.oldNumber : n.newNumber) .ToArrayAsync();
方案2:单条记录可返回多个匹配值
如果某条记录的oldNumber和newNumber都在requestNumbers中,需要两个值都返回,使用SelectMany展平集合即可:
var resultNumbers = await context.Numbers .Where(n => requestNumbers.Contains(n.oldNumber) || requestNumbers.Contains(n.newNumber)) .SelectMany(n => new[] { n.oldNumber, n.newNumber }.Where(num => requestNumbers.Contains(num))) .ToArrayAsync();
两种写法都会直接返回一维的字符串集合,不会包含未匹配的字段值。
内容的提问来源于stack exchange,提问作者vasmay
相关产品推荐
相关产品推荐

