मैं सोच रहा हूं कि मैं एक दृश्य से आरोही और अवरोही क्वेरी कैसे कर सकता हूं। मेरा वर्तमान दृश्य नीचे जैसा है:
मैं समझता हूं कि मैं निम्नलिखित का उपयोग करके दृश्य का आदेश दे सकता हूं:
Dim retrieveOrders = context.PBBuilds.Where(Function(x) x.User = userLoggedIn.Id).OrderBy(Function(x) x.Id).ToList()
मैं कॉलम शीर्षक और आरोही या अवरोही को एक क्रिया लिंक से विधि में पास करना चाहता हूं जो मुझे लगता है? (ऊपर और नीचे तीर प्रत्येक शीर्षक के पास स्थित है)।
ऑर्डरबी () एक स्ट्रिंग स्वीकार नहीं करता है .... क्या कोई कृपया मदद कर सकता है? धन्यवाद
नियंत्रक:
' GET: Dashboard
<Authorize(Roles:="Admin, Employee, User")>
Function Index() As ActionResult
Dim context = New ApplicationDbContext()
Dim UserManager = New UserManager(Of ApplicationUser)(New UserStore(Of ApplicationUser)(context))
Dim userLoggedIn = UserManager.FindById(User.Identity.GetUserId())
Dim retrieveOrders = context.PBBuilds.Where(Function(x) x.User = userLoggedIn.Id).OrderBy(Function(x) x.Id).ToList()
Dim BuildsVM = retrieveOrders.[Select](Function(build) New DashboardBuilds() With {
.BuildNumber = build.Id,
.DateCreated = build.TimeAndDate,
.MyRef = build.CustRef,
.NetCost = build.TotalNet
}).ToList()
Dim today = DateTime.Today.Date
Dim tomorrow = DateTime.Today.Date.AddDays(1)
Dim todaysBuild = retrieveOrders.Where(Function(build) build.TimeAndDate >= today And build.TimeAndDate <= tomorrow).ToList().Count()
Dim monthlyBuild = retrieveOrders.Where(Function(build) build.TimeAndDate.Year = today.Year And build.TimeAndDate.Month = today.Month).ToList().Count()
Dim yearlyBuild = retrieveOrders.Where(Function(build) build.TimeAndDate.Year = today.Year).ToList().Count()
Dim total As Decimal = BuildsVM.Sum(Function(item) item.NetCost)
Dim count As Integer = retrieveOrders.Count
Dim Average As Decimal = 0.00
If count > 0 Then
Average = total / count
End If
Dim model = New GroupedDashBoardBuilds() With {
.BuildInfos = BuildsVM,
.TotalNet = Math.Round(total, 2),
.AverageNet = Math.Round(Average, 2),
.TotalUserBuild = count,
.TotalUserBuildToday = todaysBuild,
.TotalUserBuildMonth = monthlyBuild,
.TotalUserBuildYear = yearlyBuild
}
Return View(model)
End Function
2 जवाब
चूंकि आप फ़ील्ड नाम पास कर रहे होंगे और इसे नियंत्रक में आरोही या अवरोही क्रमबद्ध करना है या नहीं:
Function Index(strColumnName As String, bolAscending As Boolean) As ActionResult
आप इस तरह के चयन केस में तर्क लागू कर सकते हैं:
Dim retrieveOrders As List(Of PBBuilds) = Nothing
Select Case strColumnName
Case "Build"
If bolAscending Then
retrieveOrders = context.PBBuilds.Where(Function(x) x.User = userLoggedIn.Id).OrderBy(Function(x) x.Id).ToList()
Else
retrieveOrders = context.PBBuilds.Where(Function(x) x.User = userLoggedIn.Id).OrderByDescending(Function(x) x.Id).ToList()
End If
Case "My Reference"
If bolAscending Then
retrieveOrders = context.PBBuilds.Where(Function(x) x.User = userLoggedIn.Id).OrderBy(Function(x) x.FieldRelatedToMyReference).ToList()
Else
retrieveOrders = context.PBBuilds.Where(Function(x) x.User = userLoggedIn.Id).OrderByDescending(Function(x) x.FieldRelatedToMyReference).ToList()
End If
'Implement for Other Cases
End Select
यदि आप डेटाबेस पर चल रहे OrderBy
के बारे में परवाह नहीं करते हैं, तो आप ऐसा कुछ कर सकते हैं:
Dictionary<string, Func<User, object>> ColumnAccessorMap = new Dictionary<string, Func<User, object>>()
{
{ "Build", user => user.ID },
{ "My Reference", user => user.MyReferenceProperty }
}
// etc...
context.MyTable.ToList().OrderBy(ColumnAccessorMap[strColumnName]);
या VB.NET में (हाथ से परिवर्तित, लंबे समय से VB का उपयोग नहीं किया है)
Dim ColumnAccessorMap as new Dictionary(of String, Object) From {{ "Build", Function(u) u.ID }, { "My Reference", Function(u) u.MyRefProperty }}
'... etc
context.MyTable.ToList().OrderBy(ColumnAccessorMap(strColumnName))
अनिवार्य रूप से, एक एक्सेसर फ़ंक्शन के लिए एक कॉलम को मैप करना जो OrderBy
को बताता है कि सॉर्ट करते समय किस संपत्ति का उपयोग करना है। दोबारा, यह .ToList
कॉल के बिना काम नहीं करेगा, जिसका अर्थ है कि सॉर्ट स्थानीय रूप से होता है, SQL में नहीं।
संबंधित सवाल
नए सवाल
vb.net
Visual Basic.NET (VB.NET) एक बहु-प्रतिमान, प्रबंधित, प्रकार-सुरक्षित, ऑब्जेक्ट-उन्मुख कंप्यूटर प्रोग्रामिंग भाषा है। C # और F # के साथ, यह .NET फ्रेमवर्क को लक्षित करने वाली मुख्य भाषाओं में से एक है। VB.NET को Microsoft के Visual Basic 6 (VB6) के विकास के रूप में देखा जा सकता है लेकिन Microsoft .NET फ्रेमवर्क पर लागू किया जा सकता है। VB6, VBA या VBScript प्रश्नों के लिए इस टैग का उपयोग न करें।