[英]In a C# ASP.NET Core 3.1 application how do I route to a controller then query string?
[英]How do I iterate over an array that's currently a string using C# and add additional values in my ASP.NET Core Application?
我在我的 Web 應用程序中使用 KendoUI。 我們的一個數據庫表將一組值作為varchar
存儲在單個列中。 每個人對此都有自己的看法,但目前我必須接受它。
數據庫服務器
Office_Ids
1,2,3,4,5
我的任務是將辦公室名稱加入這些 ID,並使這些 ID 在網格中更好(樣式化)。 問題是,作為一個字符串是不可變的,所以它開始變得非常復雜。
期望的結果如下:
"<OfficeId>1</OfficeId><OfficeName>Some Name</OfficeName><OfficeId>2</OfficeId><OfficeName>Some Name</OfficeName>"
上述結果還假設我將數據加入到 office 表中。 如果數據存儲在單獨的表中,通常我會使用正則表達式完成類似上面的操作。 事實上,這不是造成混亂的原因。
這是我的控制器,這只是我嘗試解決此問題時的測試控制器操作。 你會看到我在這里做了幾件事:
調用我的存儲庫以獲取數據
創建兩個列表,一個用於辦公室,另一個稱為test
用於嘗試將上述代碼項添加到字符串中。
我從Office_Ids
列中拆分 office Id 數組並返回到列表
然后我遍歷該列表並嘗試使用字符串插入來彈出這些標簽
public IQueryable Read() { IQueryable data = _company.GetAll();
List<string> office_item = new List<string>(); List<string> test = new List<string>(); foreach (var item in data) { office_item = item.Office_Ids .Split(',') .Select(x => x.Trim('"')) .Select(x => x.Trim(' ')).ToList(); foreach (var office in office_item ) { client.Insert(0, "<OfficeId>"); client.Insert(2, "</OfficeId>"); test.Add(client); } } Console.WriteLine(test); return data; }
問題
CompanyReview
的模型如下所示:
namespace MyCompany.Data
{
public class OfficeReview : BaseEntity
{
public string Office_Ids { get; set; }
}
}
我想我已經涵蓋了這里的所有內容,但 TL:DR 是我需要分離一個字符串,它是一個值數組,向它添加一些開始和結束標簽,然后將它作為我的模型的一部分返回到網格。 之后,我將使用一些正則表達式使其看起來不錯。
考慮使用XElement
。 它非常適合使用 Linq 查詢的 XML 構造和操作。
var officeItems = new List<string> { "1, 2, 42, 12313", "2, 5, 234", "1" };
var officeIdElements = officeItems
.SelectMany(s => s.Split(new[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries))
.Select(id => new XElement("OfficeId", id));
//The output you requested
string officeIds = string.Concat(officeIdElements.Select(idElement => idElement.ToString()));
但是,如果您想對此進行擴展以包含其他元素,例如OfficeName
,那么您可以這樣做
var officeElements = officeIdElements.Select(idElement =>
{
var officeName = $"Office { idElement.Name }";
var officeNameElement = new XElement("OfficeName", officeName);
return new XElement("Office", idElement, officeNameElement);
});
如果您需要將其包裝在父節點下以獲得格式良好的 XML
var officesElement = new XElement("Offices", officeElements);
/*
<Offices>
<Office>
<OfficeId>1</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>2</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>42</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>12313</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>2</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>5</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>234</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
<Office>
<OfficeId>1</OfficeId>
<OfficeName>Office OfficeId</OfficeName>
</Office>
</Offices>
*/
如果必須輸出字符串,以下方法可能有效:
var officeItems = new List<string> { "1, 2, 42, 12313", "2, 5, 234", "1" };
var officeResults = new List<string>();
foreach (var officeItem in officeItems)
{
foreach (var item in officeItem.Replace(" ", string.Empty).Split(","))
{
var officeName = service.GetOfficeName(item);
officeResults.Add($"<OfficeId>{item}</OfficeId><OfficeName>{officeName}</OfficeName>");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.