اگر به مدلی نیاز دارید که لزوماً یک جدول پایگاه داده را نشان نمیدهد، میتوانید از این قابلیت استفاده کنید.
اشتراکها
اگر به مدلی نیاز دارید که لزوماً یک جدول پایگاه داده را نشان نمیدهد، میتوانید از این قابلیت استفاده کنید.
CREATE TABLE Data ( id INTEGER NOT NULL PRIMARY KEY IDENTITY, data VARCHAR(50) NOT NULL ); INSERT INTO Data VALUES ('~!hasan @#$%^&*(reza)[ali]^^^^^^^^'), ('(Ja[][][]va~!@#$*d-mohammad)'), ('Mohammad'), ('Maryam'); CREATE TABLE Unwanted ( id INT NOT NULL PRIMARY KEY IDENTITY, chars CHAR(1) NOT NULL UNIQUE ); INSERT Unwanted VALUES ('~'),('!'),('@'),('#'),('$'),('%'), ('['),(']'),('^'),('&'),('*');
WITH pre AS ( SELECT ROW_NUMBER() OVER(ORDER BY id) AS id, chars FROM Unwanted ), cte AS ( SELECT data.id, nbr, CAST(Data AS VARCHAR(50)) AS Data FROM Data CROSS JOIN (SELECT COUNT(*) AS nbr FROM Unwanted)t WHERE EXISTS (SELECT * FROM Unwanted WHERE Data LIKE '%#' + chars + '%' ESCAPE '#') UNION ALL SELECT C.id, nbr - 1, CAST(REPLACE(C.data, U.chars, '') AS VARCHAR(50)) FROM cte AS C INNER JOIN pre U ON C.nbr = U.id WHERE nbr > 0 ) SELECT data FROM cte WHERE nbr = 0 UNION ALL SELECT data FROM Data WHERE NOT EXISTS (SELECT id FROM cte WHERE cte.id = data.id);
var facilities = context.Facilities.ToList();
var facilities = context.Facilities.Select(x => new { x.Name, x.MemberCost }).ToList();
var facilities = context.Facilities.Where(x => x.MemberCost > 0).ToList();
var facilities = context.Facilities.Where(x => x.MemberCost > 0 && x.MemberCost < (x.MonthlyMaintenance / 50)) .Select(x => new { x.FacId, x.Name, x.MemberCost, x.MonthlyMaintenance }).ToList();
var facilities = context.Facilities.Where(x => x.Name.Contains("Tennis")).ToList();
int[] ids = { 1, 5 }; var facilities = context.Facilities.Where(x => ids.Contains(x.FacId)).ToList();
var facilities = context.Facilities .Select(x => new { x.Name, Cost = x.MonthlyMaintenance > 100 ? "expensive" : "cheap" }).ToList();
var date = new DateTime(2012, 09, 01); var members = context.Members.Where(x => x.JoinDate >= date) .Select(x => new { x.MemId, x.Surname, x.FirstName, x.JoinDate }).ToList();
var members = context.Members.OrderBy(x => x.Surname) .Select(x => new { x.Surname }) .Distinct() .Take(10) .ToList();
var names = context.Members.Select(m => m.Surname).ToList() .Union(context.Facilities.Select(f => f.Name).ToList()) // For now we have to use `.ToList()` here .ToList();
SELECT surname FROM members UNION SELECT name FROM facilities;
var latest = context.Members.Max(x => x.JoinDate);
var latest2 = context.Members.Select(m => m.JoinDate).DefaultIfEmpty().Max();
SELECT MAX([m].[JoinDate]) FROM (SELECT NULL AS [empty]) AS [empty] LEFT OUTER JOIN [Members] AS [m] ON 1 = 1;
var latest3 = context.Members.Max(m => (DateTime?)m.JoinDate) ?? DateTime.Now;
var latest4 = context.Members.OrderByDescending(m => m.JoinDate).Select(m => m.JoinDate).FirstOrDefault();
var lastMember = context.Members.OrderByDescending(m => m.JoinDate) .Select(x => new { x.FirstName, x.Surname, x.JoinDate }) .FirstOrDefault();
var members = context.Members.Select(x => new { x.FirstName, x.Surname, x.JoinDate }) .Where(x => x.JoinDate == context.Members.Max(x => x.JoinDate)) .ToList();
یک نکتهی تکمیلی: امکان تعریف مسیریابی صفحات، با استفاده از ویژگی Route
عموما مسیریابیهای صفحات Blazor، به صورت زیر تعریف میشوند:
@page "/counter"
و اگر نیاز باشد تا این مسیر را در قسمتهای دیگری هم ذکر کنیم (برای مثال در لینکها و یا متد NavigateTo)، باید دقیقا همین مسیر و عبارت را در چندین قسمت برنامه تکرار کنیم. برای رفع این مشکل، با استفاده از ویژگی Route میتوان مسیریابی فوق را به صورت زیر بازنویسی کرد:
@attribute [Route(Constants.CounterRoute)]
در این حالت میتوان از مزیت تعریف مسیر مدنظر به صورت یک ثابت، به صورت زیر استفاده کرد:
public static class Constants { public const string CounterRoute = "/counter"; }
و اگر در قسمت دیگری از برنامه نیاز به ارجاعی به آن بود، میتوان همین رشتهی ثابت را مجددا مورد استفاده قرار داد:
NavigationManager.NavigateTo(Constants.CounterRoute);
CREATE FUNCTION dbo.checkPerson(@data XML) RETURNS BIT WITH SCHEMABINDING AS BEGIN RETURN @data.exist('/people/person') END GO CREATE TABLE tblXML ( id INT PRIMARY KEY, doc XML CHECK(dbo.checkPerson(doc)=1) ) GO
INSERT INTO tblXML (id, doc) VALUES ( 1, '<people><person name="Vahid"/></people>' ) INSERT INTO tblXML (id, doc) VALUES ( 2, '<people><emp name="Vahid"/></people>' )
The INSERT statement conflicted with the CHECK constraint "CK__tblXML__doc__060DEAE8". The conflict occurred in database "testdb", table "dbo.tblXML", column 'doc'. The statement has been terminated.
CREATE TABLE xml_tab ( id INT IDENTITY PRIMARY KEY, xml_col XML )
INSERT INTO xml_tab VALUES ('<people><person name="Vahid"/></people>') INSERT INTO xml_tab VALUES ('<people><person name="Farid"/></people>')
SELECT id, xml_col.value('(/people/person/@name)[1]', 'varchar(50)') AS name FROM xml_tab
CREATE FUNCTION getIdValue(@doc XML) RETURNS int WITH SCHEMABINDING AS BEGIN RETURN @doc.value('/*[1]/@Id', 'int') END
CREATE TABLE docs_tab ( id INT PRIMARY KEY, doc XML, CONSTRAINT id_chk CHECK(dbo.getIdValue(doc)=id) )
INSERT INTO docs_tab (id, doc) VALUES ( 1, '<Invoice Id="1"/>' ) INSERT INTO docs_tab (id, doc) VALUES ( 2, '<Invoice Id="1"/>' )
The INSERT statement conflicted with the CHECK constraint "id_chk". The conflict occurred in database "testdb", table "dbo.docs_tab". The statement has been terminated.
CREATE TABLE Invoices ( doc XML, id AS dbo.getIdValue(doc) PERSISTED PRIMARY KEY )
INSERT INTO Invoices VALUES ( '<Invoice Id="1"/>' ) INSERT INTO Invoices VALUES ( '<Invoice Id="1"/>' )
Violation of PRIMARY KEY constraint 'PK__Invoices__3213E83F145C0A3F'. Cannot insert duplicate key in object 'dbo.Invoices'. The duplicate key value is (1). The statement has been terminated.
DECLARE @doc XML SET @doc = '<foo bar="baz" />' SELECT @doc.query('/foo/@bar')
XQuery [query()]: Attribute may not appear outside of an element
DECLARE @doc XML SET @doc = '<foo bar="baz" />' SELECT @doc.query('data(/foo/@bar)')
DECLARE @x XML SET @x = '<x>hello<y>world</y></x><x>again</x>' SELECT @x.query('data(/*)')
DECLARE @x XML SET @x = '<x>hello<y>world</y></x><x>again</x>' SELECT @x.query('string(/*)')
XQuery [query()]: 'string()' requires a singleton (or empty sequence), found operand of type 'element(*,xdt:untyped) *'
SELECT @x.query('string(/*[1])')
SELECT @x.query('string(/)')
DECLARE @x XML = '<age>12</age>' SELECT @x.query('string(/age[1])')
CREATE XML SCHEMA COLLECTION root_el AS '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:geo"> <xs:element name="Root" type="xs:string" /> </xs:schema> ' GO
DECLARE @xmlDoc XML SET @xmlDoc = '<g:Root xmlns:g="urn:geo">datadata...</g:Root>' SELECT @xmlDoc.query(' declare namespace g="urn:geo"; /g:Root/text() ')
DECLARE @xmlDoc XML(root_el) SET @xmlDoc = '<g:Root xmlns:g="urn:geo">datadata...</g:Root>' SELECT @xmlDoc.query(' declare namespace g="urn:geo"; /g:Root[1]/text() ')
XQuery [query()]: 'text()' is not supported on simple typed or 'http://www.w3.org/2001/XMLSchema#anyType' elements, found 'element(g{urn:geo}:Root,xs:string) *'.
DECLARE @xmlDoc XML(root_el) SET @xmlDoc = '<g:Root xmlns:g="urn:geo">datadata...</g:Root>' SELECT @xmlDoc.query(' declare namespace g="urn:geo"; data(/g:Root[1]) ')
data(/age/text())