[英]Bit wise and operation on list and convert value to comma separated string
我有一個返回 ID、類型和值的列表。 ID 存儲為 2 的冪。下面的示例數據
var _data = await _context.clubs.Where(x => x.Type == "NewTown").ToListAsync();
ID | 類型 | 價值 |
---|---|---|
1 | 新城市 | 測試1 |
2 | 新城市 | 測試2 |
4 | 新城市 | 測試3 |
我有一個視圖 model ,它通過添加它們來存儲該表中的 ID,就像我第一個和第三個 select 一樣,如果我第一個和第二個 select 它會保存 5,它會類似地保存 5。
這些值將保存在另一個表中,我不能將 Id 存儲為逗號分隔值,因為它最終會作為令牌發送,如果我有很多字段,令牌會超過長度,這就是我保存總和的原因的ID。
現在我想做的是在顯示這些值時,如果保存了 5,我想顯示 Test1、Test3。 現在我知道如果我對數組和選定的值做一些明智的操作,它會給我下面這個例子的值。
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();
保存值 | 啟用 |
---|---|
1 | 真的 |
2 | 錯誤的 |
4 | 真的 |
8 | 錯誤的 |
16 | 錯誤的 |
32 | 錯誤的 |
64 | 錯誤的 |
128 | 錯誤的 |
這將使我為所選值啟用“true”。
現在我想知道的是如何為我的列表場景實現這一點,其中列表中有 3 個字段,並且我希望將啟用的字段的值作為逗號分隔的字符串,例如“Test1,Test3”,例如我共享。
使用 Linq: Join
, Where
, Select
, ToArray
和 String.Join 的組合,通過加入您返回的已savedVals
值列表(其中Enabled = true
)從String.Join
生成測試值列表
//a test object to simulate your DBContext
var testdbcontext = new List<dynamic>
{
new { Id = 1, Type = "NewTown", Value = "Test1" },
new { Id = 2, Type = "NewTown", Value = "Test2" },
new { Id = 4, Type = "NewTown", Value = "Test3" }
};
var savedVal= 5;
var testArray = new int[] {1,2,4,8,16,32,64,128};
Console.WriteLine(String.Join(",",
testdbcontext
.Join(testArray.Select(x => new { savedVal= x, Enabled = ((savedVal & x) > 0) })
.Where(b => b.Enabled)
.Select(c => c.savedVal),
a => a.Id,
b => b,
(a, b) => new string (a.Value)).ToArray()));
印刷:
//Test1,Test3
前面的答案絕對正確,對於初學者來說購買可能有點混亂/太復雜。 您實際上只是錯過了 String.Join 方法來實現您的目標。 我解決您問題的代碼版本是:
...(your code)
var _data = await _context
.clubs
.Where(x => x.Type == "NewTown")
.Where (x => (savedVal & x) > 0)
.ToListAsync();
resultString = String.Join(',', _data.Select(x => x.Value));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.