在C#ASP.Net MVC項目中,我試圖從LINQ變量中創建一個List> < string>。LINQ變量不使用列名稱的字符串列表?
現在這可能是一個非常基本的東西,但我不能在沒有爲該變量中的數據使用實際列名稱的情況下工作。問題在於,爲了儘量使程序儘可能動態化,我將其放到存儲過程中以獲取數據。可以有任何數量的任何方式命名的列,這取決於從中獲取數據的位置。我所關心的是將所有值寫入List> < string>,以便我可以在程序中比較用戶輸入的值。
在代碼中指向列的名稱意味着我不得不做幾十個重載的方法,所有這些方法基本上都做同樣的事情。以下是虛假的無功能代碼。但它應該打開我的意思。
// call for stored procedure var courses = db.spFetchCourseInformation().ToList(); // if the data fails a check on a single row, it will not pass the check bool passed = true; foreach (var i in courses) { // each row should be cast into a list of string, which can then be validated // on a row-by-row basis List courseRow = new List(); courseRow = courses[i]; // yes, obviously this is wrong syntax int matches = 0; foreach (string k in courseRow) { if (validator.checkMatch(courseRow[k].ToString())) { matches++; } } if (matches == 0) { passed = false; break; } }
現在下面是我現在怎麼也得做,因爲我需要使用的名稱爲列
for (int i = 0; i < courses.Count; i++) { int matches = 0; if (validator.checkMatch(courses[i].Name)) matches++; if (validator.checkMatch(courses[i].RandomOtherColumn)) matches++; if (validator.checkMatch(courses[i].RandomThirdColumn)) matches++; if (validator.checkMatch(courses[i].RandomFourthColumn)) matches++; /* etc... * etc... * you get the point * and one of these for each and every possible variation from the stored procedure, NOT good practice * */
感謝您的幫助的例子!
我試圖解決的問題是,項目創建時儘可能動態,考慮到未來的更新。目前存儲過程訪問一個表。將來,該過程將根據作爲參數傳入的用戶類型,完全從不同的表中獲取數據。但無論過程中使用哪個表,代碼的最終目標都保持不變:查看是否有任何行的值與驗證程序中的值相匹配。 – Kahn 2009-12-03 12:39:22