我有一個回傳 ID、型別和值的串列。ID 存盤為 2 的冪。下面的示例資料
var _data = await _context.clubs.Where(x => x.Type == "NewTown").ToListAsync();
| ID | 型別 | 價值 |
|---|---|---|
| 1 | 新城市 | 測驗1 |
| 2 | 新城市 | 測驗2 |
| 4 | 新城市 | 測驗3 |
我有一個視圖模型,它通過添加它們來存盤該表中的 ID,就像我選擇第一個和第三個一樣,如果我選擇第一個和第二個它將保存 3,類似地,它會保存 3。
這些值將保存在另一個表中,我不能將 Id 存盤為逗號分隔值,因為它最終會作為令牌發送,如果我有很多欄位,令牌會超過長度,這就是我保存總和的原因的ID。
現在我想做的是在顯示這些值時我想顯示 Test1 ,如果 5 被保存,則 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”,例如我共享。
uj5u.com熱心網友回復:
通過加入您回傳的where串列,使用 Linq: Join, Where, Select, ToArray,的組合String.Join從 DBContext 生成測驗值串列savedValsEnabled = true
//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
uj5u.com熱心網友回復:
前面的答案絕對正確,對于初學者來說購買可能有點混亂/太復雜。您實際上只是錯過了 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));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/510622.html
下一篇:物件C#MVC解決方案的透視表
