var result = await query.select( p => new { Id = p.Id , Title = p.Xname } ).ToListAsync();
var companys = new List<Company>();
var result = await query.select( p => new { Id = p.Id , Title = p.Xname } ).ToListAsync();
var companys = new List<Company>();
var productsDataSource = new kendo.data.DataSource({ transport: { read: { url: "api/products", dataType: "json", contentType: 'application/json; charset=utf-8', type: 'GET' }, create: { url: "api/products", contentType: 'application/json; charset=utf-8', type: "POST" }, update: { url: function (product) { return "api/products/" + product.Id; }, contentType: 'application/json; charset=utf-8', type: "PUT" }, destroy: { url: function (product) { return "api/products/" + product.Id; }, contentType: 'application/json; charset=utf-8', type: "DELETE" }, //... }, schema: { //... model: { id: "Id", // define the model of the data source. Required for validation and property types. fields: { "Id": { type: "number", editable: false }, //تعیین نوع فیلد برای جستجوی پویا مهم است "Name": { type: "string", validation: { required: true } }, "IsAvailable": { type: "boolean" }, "Price": { type: "number", validation: { required: true, min: 1 } }, "AddDate": { type: "date", validation: { required: true } } } } }, batch: false, // enable batch editing - changes will be saved when the user clicks the "Save changes" button //... });
namespace KendoUI06.Controllers { public class ProductsController : ApiController { public HttpResponseMessage Post(Product product) { if (!ModelState.IsValid) return Request.CreateResponse(HttpStatusCode.BadRequest); var id = 1; var lastItem = ProductDataSource.LatestProducts.LastOrDefault(); if (lastItem != null) { id = lastItem.Id + 1; } product.Id = id; ProductDataSource.LatestProducts.Add(product); var response = Request.CreateResponse(HttpStatusCode.Created, product); response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = product.Id })); // گرید آی دی جدید را به این صورت دریافت میکند response.Content = new ObjectContent<DataSourceResult>( new DataSourceResult { Data = new[] { product } }, new JsonMediaTypeFormatter()); return response; } } }
var productsDataSource = new kendo.data.DataSource({ //... schema: { data: "Data", total: "Total", } //... });
namespace KendoUI06.Controllers { public class ProductsController : ApiController { public DataSourceResult Get(HttpRequestMessage requestMessage) { var request = JsonConvert.DeserializeObject<DataSourceRequest>( requestMessage.RequestUri.ParseQueryString().GetKey(0) ); var list = ProductDataSource.LatestProducts; return list.AsQueryable() .ToDataSourceResult(request.Take, request.Skip, request.Sort, request.Filter); } } }
response.Content = new ObjectContent<DataSourceResult>( new DataSourceResult { Data = new[] { product } }, new JsonMediaTypeFormatter());
namespace KendoUI06.Controllers { public class ProductsController : ApiController { public HttpResponseMessage Delete(int id) { var item = ProductDataSource.LatestProducts.FirstOrDefault(x => x.Id == id); if (item == null) return Request.CreateResponse(HttpStatusCode.NotFound); ProductDataSource.LatestProducts.Remove(item); return Request.CreateResponse(HttpStatusCode.OK, item); } [HttpPut] // Add it to fix this error: The requested resource does not support http method 'PUT' public HttpResponseMessage Update(int id, Product product) { var item = ProductDataSource.LatestProducts .Select( (prod, index) => new { Item = prod, Index = index }) .FirstOrDefault(x => x.Item.Id == id); if (item == null) return Request.CreateResponse(HttpStatusCode.NotFound); if (!ModelState.IsValid || id != product.Id) return Request.CreateResponse(HttpStatusCode.BadRequest); ProductDataSource.LatestProducts[item.Index] = product; return Request.CreateResponse(HttpStatusCode.OK); } } }
$("#report-grid").kendoGrid({ //.... editable: { confirmation: "آیا مایل به حذف ردیف انتخابی هستید؟", destroy: true, // whether or not to delete item when button is clicked mode: "popup", // options are "incell", "inline", and "popup" //template: kendo.template($("#popupEditorTemplate").html()), // template to use for pop-up editing update: true, // switch item to edit mode when clicked? window: { title: "مشخصات محصول" // Localization for Edit in the popup window } }, columns: [ //.... { command: [ { name: "edit", text: "ویرایش" }, { name: "destroy", text: "حذف" } ], title: " ", width: "160px" } ], toolbar: [ { name: "create", text: "افزودن ردیف جدید" }, { name: "save", text: "ذخیرهی تمامی تغییرات" }, { name: "cancel", text: "لغو کلیهی تغییرات" }, { template: kendo.template($("#toolbarTemplate").html()) } ], messages: { editable: { cancelDelete: "لغو", confirmation: "آیا مایل به حذف این رکورد هستید؟", confirmDelete: "حذف" }, commands: { create: "افزودن ردیف جدید", cancel: "لغو کلیهی تغییرات", save: "ذخیرهی تمامی تغییرات", destroy: "حذف", edit: "ویرایش", update: "ثبت", canceledit: "لغو" } } });
using System; using System.Threading; using Microsoft.Extensions.DependencyInjection; namespace Utils { public static class ServiceLocatorProvider { private static readonly Lazy<IServiceProvider> _serviceProviderBuilder = new Lazy<IServiceProvider>(GetServiceProvider, LazyThreadSafetyMode.ExecutionAndPublication); /// <summary> /// A lazy loaded thread-safe singleton /// </summary> public static IServiceProvider Current { get; } = _serviceProviderBuilder.Value; private static IServiceProvider GetServiceProvider() { var services = new ServiceCollection(); ConfigureServices(services); return services.BuildServiceProvider(); } private static void ConfigureServices(IServiceCollection services) { // TODO: add other services here ... services.AddSingleton .... } } public static class ServiceLocator { public static object GetService(Type serviceType) { return ServiceLocatorProvider.Current.GetService(serviceType); } public static TService GetService<TService>() { return ServiceLocatorProvider.Current.GetService<TService>(); } public static object GetRequiredService(Type serviceType) { return ServiceLocatorProvider.Current.GetRequiredService(serviceType); } public static TService GetRequiredService<TService>() { return ServiceLocatorProvider.Current.GetService<TService>(); } public static void RunScopedService<T, S>(Action<S, T> callback) { using (var serviceScope = ServiceLocatorProvider.Current.GetRequiredService<IServiceScopeFactory>().CreateScope()) { var context = serviceScope.ServiceProvider.GetRequiredService<S>(); callback(context, serviceScope.ServiceProvider.GetRequiredService<T>()); if (context is IDisposable disposable) { disposable.Dispose(); } } } public static void RunScopedService<S>(Action<S> callback) { using (var serviceScope = ServiceLocatorProvider.Current.GetRequiredService<IServiceScopeFactory>().CreateScope()) { var context = serviceScope.ServiceProvider.GetRequiredService<S>(); callback(context); if (context is IDisposable disposable) { disposable.Dispose(); } } } public static T RunScopedService<T, S>(Func<S, T> callback) { using (var serviceScope = ServiceLocatorProvider.Current.GetRequiredService<IServiceScopeFactory>().CreateScope()) { var context = serviceScope.ServiceProvider.GetRequiredService<S>(); return callback(context); } } } }
برای کار با CoffeeScript، ابتدا باید با ساختار Syntax آن آشنا شد. CoffeeScript در بسیاری از موارد با جاوااسکریپت یکسان است در حالیکه در قسمت قبل گفته شد که CoffeeScript زیر مجموعهای جاوااسکریپت نیست؛ بنابراین برخی از کلمات کلیدی مانند function و var در آن مجاز نیست و سبب بروز خطا در زمان کامپایل میشوند. وقتی شما شروع به نوشتن فایل CoffeeScript میکنید، باید تمام کدهایی را که مینویسید، با Syntax کامل CoffeeScript بنویسید و نمیتوانید قسمتی را با جاوااسکریپت و قسمتی را با CoffeeScript بنویسید.
برای نوشتن توضیحات در فایل CoffeeScript باید از علامت # استفاده کنید که این قسمت را از زبان Ruby گرفته است.
# A comment
### A multiline comment ###
CoffeeScript یکی از باگهایی را که در نوشتن جاوااسکریپت وجود دارد (متغیرهای سراسری) حل کرده است. در جاوااسکریپت درصورتیکه هنگام تعریف متغیری از کلمهی کلیدی var در پشت اسم متغیر استفاده نشود، به صورت سراسری تعریف میشود. CoffeeScript به سادگی متغیرهای سراسری را حذف میکند. در پشت صحنهی این حذف، اسکریپت نوشته شده را درون یک تابع بدون نام قرار میدهد و با این کار تمامی متغیرها در ناحیهی محلی قرار میگیرند و سپس قبل از نام هر متغیری، کلمهی کلیدی var را قرار میدهد. برای مثال:
myVariable = "vahid"
var myVariable; myVariable = "vahid";
exports = this exports.MyVariable = "vahid"
CoffeeScript برای راحتی در نوشتن توابع، کلمه کلیدی function را حذف کرده و به جای آن از <- استفاده میکند. توابع در CoffeeScript میتوانند در یک خط یا به صورت تورفته در چندین خط نوشته شده باشند. آخرین عبارتی که در یک تابع نوشته میشود به صورت ضمنی بازگشت داده میشود. در صورتیکه نیاز به بازگرداندن مقداری در تابع ندارید، از کلمهی return به تنهایی استفاده کنید.
func = -> "vahid"
var func; func = function() { return "vahid"; };
func = -> # An extra line "vahid"
برای تعریف آرگومان در توابع باید قبل از <- از () استفاده کرد و آرگومان هایی را که نیاز است، در داخل آن تعریف کرد. برای مثال:
func = (a, b) -> a * b
var func; func = function(a, b) { return a * b; };
func = (a = 1, b = 2) -> a * b
sum = (nums...) -> result = 0 nums.forEach (n) -> result += n result
var sum, slice = [].slice; sum = function() { var nums, result; nums = 1 <= arguments.length ? slice.call(arguments, 0) : []; result = 0; nums.forEach(function(n) { return result += n; }); return result; };
فراخوانی توابع
برای فراخوانی توابع میتوانید به مانند جاوااسکریپت از با پرانتز () یا ()apply و یا ()call صدا زده شوند. اگرچه مانند Ruby، کامپایلر CoffeeScript میتوانند به صورت اتوماتیک توابعی با حداقل یک آرگومان را فراخوانی کند.
a = "Vahid!" alert a # برابر است با alert(a) alert inspect a # برابر است با alert(inspect(a))
namespace System.Text.Json { public static class JsonSerializer { public static object Deserialize(ReadOnlySpan<byte> utf8Json, Type returnType, JsonSerializerOptions options = null); public static object Deserialize(string json, Type returnType, JsonSerializerOptions options = null); public static TValue Deserialize<TValue>(ReadOnlySpan<byte> utf8Json, JsonSerializerOptions options = null); public static TValue Deserialize<TValue>(string json, JsonSerializerOptions options = null); public static object Deserialize(ref Utf8JsonReader reader, Type returnType, JsonSerializerOptions options = null); public static TValue Deserialize<TValue>(ref Utf8JsonReader reader, JsonSerializerOptions options = null); public static ValueTask<object> DeserializeAsync(Stream utf8Json, Type returnType, JsonSerializerOptions options = null, CancellationToken cancellationToken = default); public static ValueTask<TValue> DeserializeAsync<TValue>(Stream utf8Json, JsonSerializerOptions options = null, CancellationToken cancellationToken = default); public static string Serialize(object value, Type inputType, JsonSerializerOptions options = null); public static string Serialize<TValue>(TValue value, JsonSerializerOptions options = null); public static void Serialize(Utf8JsonWriter writer, object value, Type inputType, JsonSerializerOptions options = null); public static void Serialize<TValue>(Utf8JsonWriter writer, TValue value, JsonSerializerOptions options = null); public static Task SerializeAsync(Stream utf8Json, object value, Type inputType, JsonSerializerOptions options = null, CancellationToken cancellationToken = default); public static Task SerializeAsync<TValue>(Stream utf8Json, TValue value, JsonSerializerOptions options = null, CancellationToken cancellationToken = default); public static byte[] SerializeToUtf8Bytes(object value, Type inputType, JsonSerializerOptions options = null); public static byte[] SerializeToUtf8Bytes<TValue>(TValue value, JsonSerializerOptions options = null); } }
namespace System.Text.Json { public sealed class JsonSerializerOptions { public JsonSerializerOptions(); public bool AllowTrailingCommas { get; set; } public IList<JsonConverter> Converters { get; } public int DefaultBufferSize { get; set; } public JsonNamingPolicy DictionaryKeyPolicy { get; set; } public bool IgnoreNullValues { get; set; } public bool IgnoreReadOnlyProperties { get; set; } public int MaxDepth { get; set; } public bool PropertyNameCaseInsensitive { get; set; } public JsonNamingPolicy PropertyNamingPolicy { get; set; } public JsonCommentHandling ReadCommentHandling { get; set; } public bool WriteIndented { get; set; } public JsonConverter GetConverter(Type typeToConvert); } }
namespace System.Text.Json.Serialization { public abstract class JsonConverter { public abstract bool CanConvert(Type typeToConvert); } }
namespace CoreIocServices { public interface IMessageService { void Send(string message); } public class EmailService : IMessageService { public void Send(string message) { // ... } } public class SmsService : IMessageService { public void Send(string message) { //todo: ... } } }
namespace CoreIocSample02 { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddTransient<IMessageService, EmailService>(); services.AddTransient<IMessageService, SmsService>(); }
using CoreIocServices; using Microsoft.AspNetCore.Mvc; namespace CoreIocSample02.Controllers { public class MessagesController : Controller { private readonly IMessageService _emailService; private readonly IMessageService _smsService; public MessagesController(IMessageService emailService, IMessageService smsService) { _emailService = emailService; _smsService = smsService; } } }
using System.Collections.Generic; using CoreIocServices; using Microsoft.AspNetCore.Mvc; namespace CoreIocSample02.Controllers { public class MessagesController : Controller { private readonly IEnumerable<IMessageService> _messageServices; public MessagesController(IEnumerable<IMessageService> messageServices) { _messageServices = messageServices; }
var emailService = _messageServices.OfType<EmailService>().First();
var messageServices = serviceProvider.GetServices<IMessageService>();
namespace CoreIocServices { public enum MessageServiceType { EmailService, SmsService }
namespace CoreIocSample02 { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddTransient<EmailService>(); services.AddTransient<SmsService>();
namespace CoreIocSample02 { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddTransient<EmailService>(); services.AddTransient<SmsService>(); services.AddTransient<Func<MessageServiceType, IMessageService>>(serviceProvider => key => { switch (key) { case MessageServiceType.EmailService: return serviceProvider.GetRequiredService<EmailService>(); case MessageServiceType.SmsService: return serviceProvider.GetRequiredService<SmsService>(); default: throw new NotImplementedException($"Service of type {key} is not implemented."); } });
namespace CoreIocSample02.Controllers { public class MessagesController : Controller { private readonly Func<MessageServiceType, IMessageService> _messageServiceResolver; public MessagesController(Func<MessageServiceType, IMessageService> messageServiceResolver) { _messageServiceResolver = messageServiceResolver; }
public IActionResult Index() { var emailService = _messageServiceResolver(MessageServiceType.EmailService); //use emailService ... return View(); }
public static class TestDependencyScope { private static IContainer _currentNestedContainer; public static void Begin() { if (_currentNestedContainer != null) throw new Exception("Cannot begin test dependency scope. Another dependency scope is still in effect."); _currentNestedContainer = IoC.Container.GetNestedContainer(); } public static IContainer CurrentNestedContainer { get { if (_currentNestedContainer == null) throw new Exception($"Cannot access the {nameof(CurrentNestedContainer)}. There is no dependency scope in effect."); return _currentNestedContainer; } } public static void End() { if (_currentNestedContainer == null) throw new Exception("Cannot end test dependency scope. There is no dependency scope in effect."); _currentNestedContainer.Dispose(); _currentNestedContainer = null; } }
public class ContainerPerTestCaseAttribute : Attribute, ITestAction { public void BeforeTest(ITest test) { TestDependencyScope.Begin(); } public void AfterTest(ITest test) { TestDependencyScope.End(); } public ActionTargets Targets => ActionTargets.Test; }
[PopulateHttpContext] [ContainerPerTestCase] [Transactional] [TestFixture] public class IntegratedTestBase { [SetUp] public void EachTestSetUp() { BeforeEachTest(); } [TearDown] public void EachTestTearDown() { AfterEachTest(); } protected virtual void BeforeEachTest() { } protected virtual void AfterEachTest() { } protected void UsingUnitOfWork(Action<IUnitOfWork> action) { IoC.Container.Using((IUnitOfWork uow)=> { uow.DisableAllFilters(); action(uow); }); } protected T UsingUnitOfWork<T>(Func<IUnitOfWork, T> func) { var uow = IoC.Resolve<IUnitOfWork>(); uow.DisableAllFilters(); using (uow) { var result = func(uow); uow.SaveChanges(); return result; } } protected async Task<T> UsingUnitOfWorkAsync<T>(Func<IUnitOfWork, Task<T>> func) { var uow = IoC.Resolve<IUnitOfWork>(); uow.DisableAllFilters(); using (uow) { var result = await func(uow).ConfigureAwait(false); await uow.SaveChangesAsync().ConfigureAwait(false); return result; } } }
namespace ProjectName.ServiceLayer.IntegrationTests { public static class Testing { private static IContainer Container => TestDependencyScope.CurrentNestedContainer; public static T Resolve<T>() { return Container.GetInstance<T>(); } public static object Resolve(Type type) { return Container.GetInstance(type); } public static void Inject<T>(T instance) where T : class { Container.Inject(instance); } } } //in test classes using static ProjectName.ServiceLayer.IntegrationTests.Testing; namespace ProjectName.ServiceLayer.IntegrationTests { public class RoleServiceTests : IntegratedTestBase { private IRoleService _service; protected override void BeforeEachTest() { _service = Resolve<IRoleService>(); } } }
$('#list').jqGrid({ caption: "آزمایش نهم", // .... colModel: [ { name: 'myac', width: 80, fixed: true, sortable: false, resize: false, //formatter: 'actions', formatter: function (cellvalue, options, rowObject) { if (cellvalue === undefined && options.rowId === "_empty") { // در حالت نمایش ردیف توکار جدید دکمههای ویرایش و حذف معنی ندارند options.colModel.formatoptions.editbutton = false; options.colModel.formatoptions.delbutton = false; } return $.fn.fmatter.actions(cellvalue, options, rowObject); }, formatoptions: { keys: true, afterSave: function (rowid, response) { }, delbutton: true, delOptions: { url: "@Url.Action("DeleteUser", "Home")" } } } ], //... }).navGrid( '#pager', //... ) .jqGrid('gridResize', { minWidth: 400, minHeight: 150 }) .jqGrid('inlineNav', '#pager', { edit: true, add: true, save: true, cancel: true, edittext: "ویرایش", addtext: "جدید", savetext: "ذخیره", canceltext: "لغو", addParams: { // اگر میخواهید ردیفهای جدید در ابتدا ظاهر شوند، این سطر را حذف کنید position: "last", //ردیفهای جدید در آخر ظاهر میشوند rowID: '_empty', useDefValues: true, addRowParams: getInlineNavParams(true) }, editParams: getInlineNavParams(false) });
function getInlineNavParams(isAdd) { return { // استفاده از آدرسهای مختلف برای حالات ویرایش و ثبت اطلاعات جدید url: isAdd ? '@Url.Action("AddUser", "Home")' : '@Url.Action("EditUser","Home")', key: true, restoreAfterError: false, // این مورد سبب میشود تا اعتبارسنجی سمت سرور قابل اعمال شود oneditfunc: function (rowId) { // نمایش دکمههای ذخیره و لغو داخل همان سطر $("#jSaveButton_" + rowId).show(); $("#jCancelButton_" + rowId).show(); }, successfunc: function () { var $self = $(this); setTimeout(function () { $self.trigger("reloadGrid"); // دریافت کلید اصلی ردیف از سرور }, 50); }, errorfunc: function (rowid, response, stat) { if (stat != 'error') // this.Response.StatusCode == 200 return; var result = $.parseJSON(response.responseText); if (result.success === false) { //نمایش خطای اعتبار سنجی سمت سرور پس از ویرایش یا افزودن $.jgrid.info_dialog($.jgrid.errors.errcap, '<div class="ui-state-error">' + result.message + '</div>', $.jgrid.edit.bClose, { buttonalign: 'center' }); } } }; }
if (_usersInMemoryDataSource.Any( user => user.Name.Equals(postData.Name, StringComparison.InvariantCultureIgnoreCase))) { this.Response.StatusCode = 500; //این مورد برای افزودن داخل ردیفهای گرید لازم است return Json(new { success = false, message = "نام کاربر تکراری است" }, JsonRequestBehavior.AllowGet); }
$('#list').jqGrid({ caption: "آزمایش نهم", //......... }).navGrid( '#pager', //enabling buttons { add: true, del: true, edit: true, search: false }, //edit option { //......... errorTextFormat: serverErrorTextFormat }, //add options { //......... errorTextFormat: serverErrorTextFormat }, //delete options { //......... }) .jqGrid('gridResize', { minWidth: 400, minHeight: 150 }) .jqGrid('inlineNav', '#pager', { //......... }); function serverErrorTextFormat (response) { // در حالتیکه وضعیت خروجی از سرور 200 نیست فراخوانی میشود var result = $.parseJSON(response.responseText); if (result.success === false) { return result.message; } return "لطفا ورودیهای وارد شده را بررسی کنید"; }
PM> Install-Package Lex.Db
public class Product { public int Id { get; set; } public string Name { get; set; } } public class Customer { public int Id { get; set; } public string Name { get; set; } public string City { get; set; } } public class Order { public int Id { get; set; } public int? CustomerFK { get; set; } public int[] ProductsFK { get; set; } }
public static class Database { public static DbInstance Instance { get; private set; } public static DbTable<Product> Products { get; private set; } public static DbTable<Order> Orders { get; private set; } public static DbTable<Customer> Customers { get; private set; } /// <summary> /// سازنده استاتیکی که در طول عمر برنامه فقط یکبار اجرا میشود /// </summary> static Database() { createDb(); getTables(); } private static void getTables() { Products = Instance.Table<Product>(); Customers = Instance.Table<Customer>(); Orders = Instance.Table<Order>(); } private static void createDb() { Instance = new DbInstance(Path.Combine(Environment.CurrentDirectory, "LexDbTests")); Instance.Map<Product>() .WithIndex("NameIdx", x => x.Name) .Automap(i => i.Id, true); Instance.Map<Order>() .Automap(i => i.Id, true); Instance.Map<Customer>() .WithIndex("NameIdx", x => x.Name) .WithIndex("CityIdx", x => x.City) .Automap(i => i.Id, true); Instance.Initialize(); } }
private static void addData() { var customer1 = new Customer { Name = "customer1", City = "City1" }; var customer2 = new Customer { Name = "customer2", City = "City2" }; Database.Instance.Save(customer1, customer2); // automatic Id assignment after Save var product1 = new Product { Name = "product1" }; var product2 = new Product { Name = "product2" }; Database.Instance.Save(product1, product2); // automatic Id assignment after Save var order1 = new Order { CustomerFK = customer1.Id, ProductsFK = new[] { product1.Id } }; var order2 = new Order { CustomerFK = customer2.Id, ProductsFK = new[] { product1.Id, product2.Id } }; Database.Instance.Save(order1, order2); // automatic Id assignment after Save }
private static void loadAll() { var orders = Database.Orders.LoadAll(); foreach (var order in orders) { // نحوه دریافت اطلاعات مشتری بر اساس کلید خارجی ثبت شده var orderCustomer = Database.Customers.LoadByKey(order.CustomerFK.Value); Console.WriteLine("Order Id: {0}, Customer: {1} ({2}) {3}", order.Id, orderCustomer.Name, orderCustomer.Id, orderCustomer.City); // نحوه بازیابی لیستی از اشیاء مرتبط از طریق آرایهای از کلیدهای خارجی ثبت شده var orderProducts = Database.Products.LoadByKeys(order.ProductsFK); foreach (var product in orderProducts) { Console.WriteLine(" Product Id: {0}, Name: {1}", product.Id, product.Name); } } }
private static void queryingByAnIndex() { var name = "customer1"; var customersList = Database.Customers .IndexQueryByKey("NameIdx", name) .ToList(); foreach (var person in customersList) { Console.WriteLine(person.Name); } }
// Using Take and Skip var list1 = Database.Orders.Query<int>() // primary idx .Take(1).Skip(2).ToList(); // Querying Between Ranges var list2 = Database.Customers .IndexQuery<string>("NameIdx") .GreaterThan("a", orEqual: true).LessThan("d").ToList();
private static void deletingRecords() { Database.Customers.DeleteByKey(key: 1); var customers = Database.Customers.LoadByKeys(new[] { 1, 2 }); Database.Customers.Delete(customers); }