我有一个返回ID、类型和值的列表。ID以2的幂存储。示例数据如下
var _data = await _context.clubs.Where(x => x.Type == "NewTown").ToListAsync();
| 识别码|型号|数值|
| - -|- -|- -|
| 一个|纽敦|测试1|
| 2个|纽敦|测试2|
| 四个|纽敦|测试3|
我有一个视图模型,它通过添加ID来存储此表中的ID,例如,如果我选择first和third,它将保存5;类似地,如果我选择first和second,它将保存3。
这些值将保存在不同的表中,我不能将Id存储为逗号分隔的值,因为它最终将作为令牌发送,如果我有许多字段,令牌将超过长度,这就是为什么我保存Id的总和。
现在我想做的是,在显示这些值的同时,如果保存了5,我想显示Test1,Test 3,现在我知道了,如果我对数组和所选的值进行一个位与运算,它会给予我如下例所示的值。
var savedVal= 5;
var testArray = new int[] {1,2,4,8,16,32,64,128};
testArray .Select(x => new { savedVal= x, Enabled = ((savedVal & x) > 0) }).Dump();
| 保存值|已启用|
| - -|- -|
| 一个|正确|
| 2个|错误|
| 四个|正确|
| 八个|错误|
| 十六|错误|
| 三十二|错误|
| 六十四|错误|
| 一百二十八|错误|
这将为所选的值给予启用的“true”。
现在,我想知道的是,如何在我的列表场景中实现这一点,在该场景中,我的列表中有3个字段,我希望将启用字段的值作为逗号分隔的字符串,如我分享的示例中的“Test1,Test 3”。
2条答案
按热度按时间fd3cxomn1#
使用Linq:
Join
,Where
,Select
,ToArray
,与String.Join
一起使用,通过联接返回的savedVals
列表(其中Enabled = true
打印:
ezykj2lf2#
前面的答案肯定是正确的,buy可能对初学者来说有点混乱/太复杂了。你实际上只错过了String.Join方法来实现你的目标。我的代码版本来解决你的问题是: