簡體   English   中英

顯示記錄外鍵的標題

[英]Display the title of the record foreign key

美好的一天! 面對問題,有一個表,其中包含4個字段(標識,父標​​識,標題,已創建,描述),其中父標識是同一表中ID的外鍵。 如何在客戶端顯示的表中不是ParentId,即父記錄Title(如果有)?

類:

public class MyClass
    {
        public int Id { get; set; }
        public int? ParentId { get; set; }
        public string Title { get; set; }
        public DateTime Created { get; set; }
        public string Description { get; set; }
    }

控制器:

        public ViewResult Index(string sortOrder, string currentFilter, string searchString, int? page)
        {

            Repository repository = new Repository();

            ViewBag.CurrentSort = sortOrder;

            ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "Name desc" : "";
            ViewBag.DateSortParm = sortOrder == "Date" ? "Date desc" : "Date";

            if (Request.HttpMethod == "GET")
            {
                searchString = currentFilter;
            }
            else
            {
                page = 1;
            }
            ViewBag.CurrentFilter = searchString;

            var records = from s in repository.GetMyClass()  select s;

            if (!String.IsNullOrEmpty(searchString))
            {
                records = records.Where(s => s.Title.ToUpper().Contains(searchString.ToUpper()));
            }



            switch (sortOrder)
            {
                case "Name desc":
                    records = records.OrderByDescending(s => s.Title);
                    break;
                case "Date":
                    records = records.OrderBy(s => s.Created);
                    break;
                case "Date desc":
                    records = records.OrderByDescending(s => s.Created);
                    break;
                default:
                    records = records.OrderBy(s => s.Title);
                    break;
            }

            int pageSize = 4;
            int pageIndex = (page ?? 1);



            return View("_TableRecords",records.ToPagedList(pageIndex, pageSize));
        }

您需要實現自我連接。

首先,您需要在ViewModel中再添加一個字段:

public string ParentTitle { get; set; }

然后更改獲取數據的方式,應該是這樣的:

IEnumerable<MyClass> myData = 
    from m in t.YourEntity
    join e1 in t.YourEntity on m.ParentId equals e1.Id
    select new MyClass
    { 
        Id = m.Id,
        ParentId = m.ParentId,
        Title = m.Title,
        ParentTitle = e1.Title,
        Created = m.Created,
        Description = m.Description
    };

    return View(myData.ToList());

嘗試此操作,在sql腳本中選擇包括父標題在內的所有數據,如下所示:

DECLARE @DemoTable TABLE(
Id INT,
ParentId INT,
Title NVARCHAR(50),
Created DATETIME,
Description NVARCHAR(50))

INSERT INTO @DemoTable VALUES(1, NULL, 'Fruit', '2018-03-06 17:00:00.000', '')
INSERT INTO @DemoTable VALUES(2, 1, 'Apple', '2018-03-06 17:00:00.000', '')
INSERT INTO @DemoTable VALUES(3, 1, 'Banana', '2018-03-06 17:00:00.000', '')
INSERT INTO @DemoTable VALUES(4, NULL, 'Sport', '2018-03-06 17:00:00.000', '')
INSERT INTO @DemoTable VALUES(5, 4, 'Baseball', '2018-03-06 17:00:00.000', '')
INSERT INTO @DemoTable VALUES(6, 4, 'Football', '2018-03-06 17:00:00.000', '')


SELECT T1.Id, T1.Title, T1.ParentId, T2.Title AS 'ParentTitle'
FROM @DemoTable AS T1
LEFT JOIN @DemoTable AS T2
ON T1.ParentId = T2.Id

執行結果
在此處輸入圖片說明

您可以獲得包括父標題在內的所有數據
然后,將您的viewmodel更改為此:

public class MyClass
    {
        public int Id { get; set; }
        public int? ParentId { get; set; }
        public string ParentTitle { get; set; }
        public string Title { get; set; }
        public DateTime Created { get; set; }
        public string Description { get; set; }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM