有兩個我想要組合資料的 sql 表
- queryTable --- 這里 queryFrom 是數字,QueryTo 是逗號分隔的數字字串

- 用戶表

我可以從只有單個用戶的地方獲取 queryFrom 的資料,但不能獲取 queryTo 的資料,我想拆分字串 {","},轉換為 int 陣列,在 userTable 中搜索該數字并使用相應的用戶名加入。
這是我的查詢
var query = (from q in queryTable
select {
Id = q.id,
QueryFrom = userTable.where(u=> u.id == q.queryFrom).select(s=>s.userName),
QueryTo = q.queryTo // split and join logic here
}).ToList();
電流輸出---

預期輸出---

uj5u.com熱心網友回復:
鑒于您的資料:
var userTable = new[]
{
new { UserId = 1, UserName = "Tom" },
new { UserId = 2, UserName = "Mike" },
new { UserId = 3, UserName = "Harry" },
};
var queryTable = new[]
{
new { QueryId = 1, QueryFrom = 1, QueryTo = "2, 3" },
new { QueryId = 2, QueryFrom = 2, QueryTo = "3" },
new { QueryId = 2, QueryFrom = 3, QueryTo = "1, 2" },
};
這是我能想到的最干凈的方法:
var query =
(
from q in queryTable
join uf in userTable on q.QueryFrom equals uf.UserId
let uts =
from qt in q.QueryTo.Split(',')
join ut in userTable on int.Parse(qt.Trim()) equals ut.UserId
select ut.UserName
select new
{
q.QueryId,
QueryFrom = uf.UserName,
QueryTo = String.Join(", ", uts),
}
).ToList();
這給了我:

uj5u.com熱心網友回復:
我已經用這段代碼進行了測驗:
- 類定義
public class queryTable
{
public queryTable(int queryId, int queryFrom, string queryto)
{
QueryId = queryId;
QueryFrom = queryFrom;
Queryto = queryto;
}
public int QueryId { get; set; }
public int QueryFrom { get; set; }
public string Queryto { get; set; }
}
public class userTable
{
public userTable(int userId, string userName)
{
UserId = userId;
UserName = userName;
}
public int UserId { get; set; }
public string UserName { get; set; }
}
var queryTable = new List<queryTable> { new queryTable(1, 1, "2,3"), new queryTable(2, 2, "3"), new queryTable(3, 3, "1,2") };
var userTable = new List<userTable> { new userTable(1, "Tom"), new userTable(2, "Mike"), new userTable(3, "Harry") };
var query =
(from q in queryTable
select (new {
Id = q.QueryId,
QueryFrom = userTable.Where(u => u.UserId == q.QueryId).Select(s => s.UserName).FirstOrDefault(),
QueryTo = string.Join(",", q.Queryto.Split(',') //split
.Select(n => userTable.Where(u => u.UserId == int.Parse(n.Trim()))
.Select(u => u.UserName).FirstOrDefault())
)
})).ToList();
foreach (var l in query)
Console.WriteLine(l);
結果:
{ Id = 1, QueryFrom = Tom, QueryTo = Mike,Harry }
{ Id = 2, QueryFrom = Mike, QueryTo = Harry }
{ Id = 3, QueryFrom = Harry, QueryTo = Tom,Mike }
根據您遇到的錯誤:嘗試添加 ToList()
.Select(n => userTable.Where(u => u.UserId == int.Parse(n.Trim())).ToList()
uj5u.com熱心網友回復:
這里的困難是因為它是一個無效的資料庫設計。列應該有單個值,而不是值串列,這個例子說明了原因。如果將現有的多值 QueryTo 列替換為單獨的行,使用整數列 QueryFrom 和 QueryTo,則資料操作變得微不足道。
查詢表:QueryId int、QueryFrom int QueryTo 表:QueryId int、QueryTo int(每查詢一個用戶一行)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/431544.html
