آفای نصیری مرسی واقعا واسه وبلاگ سنگ تموم میزارین.
اگه امکانش باشه یک پستی در مورد افزونه های لازم برای Visual Studio (از نطر خودتون) با کمی معرفی، بنویسید.(مخصوصا این CodeRush واقعا چیه جالبیه).
در برخی از مواقع بر روی اشیاء یک لیست، در یک کلاس، با استفاده از حلقههای foreach یا for کارهای متفاوتی انجام میشود. به عنوان مثال در یک لیست که از سطرهای فاکتور تشکیل شده است، میخواهیم جمع مقادیر کلیه سطرهای فاکتور یا جمع مبلغ یا مالیات یا تخفیف آنها را بدست آوریم . با وجود سادگی حلقههای foreach و for، ممکن است که در برخی از مواقع از راه متفاوتی استفاده شود. برای مثال اجازه بدهید مثال ذیل را با هم بررسی کنیم:
در کلاس Invoice دو متد وجود دارد با نام های CalculateTotalTax و CalculateTotal
متد CalculateTotalTax مجموع مالیات و متد CalculateTotal مجموع مقدار این فاکتور را بدست میآورد .
public float CalculateTotalTax1() { IList<InvoiceLineItem> invoiceLineItem = new List<InvoiceLineItem>(); Decimal result = 0M; foreach (InvoiceLineItem index in invoiceLineItem) { result += (Decimal)index.CalculateTax(); } return (float)result; } public float CalculateTotal() { IList<InvoiceLineItem> invoiceLineItem = new List<InvoiceLineItem>(); Decimal result = 0M; foreach (InvoiceLineItem index in invoiceLineItem) { result += (Decimal)index.CalculateSubTotal(); } return (float)result; }
ما میتوانیم مسئولیت چرخش در لیست سطرهای فاکتور را از این متدها برداریم و آن را از IEnumerable جدا کنیم؛ به وسیله ایجاد یک متد که پارامتر ورودی Action<T> delegate را دریافت میکند و این delegate را برای هر سطر در هر چرخش اجرا میکند.
public void PerformActionOnAllLineItems(Action<InvoiceLineItem> action) { IList<InvoiceLineItem> invoiceLineItem = new List<InvoiceLineItem>(); invoiceLineItem.Add(new InvoiceLineItem { Id = 1, amount = 10, Price = 10000 }); invoiceLineItem.Add(new InvoiceLineItem { Id = 2, amount = 10, Price = 10000 }); invoiceLineItem.Add(new InvoiceLineItem { Id = 3, amount = 10, Price = 10000 }); invoiceLineItem.Add(new InvoiceLineItem { Id = 4, amount = 10, Price = 10000 }); foreach (InvoiceLineItem index in invoiceLineItem) { action(index); } }
و همچنین میتوانیم دو متد خود را به شکل ذیل تغییر دهیم
float CalculateTotal() { Decimal result = 0M; PerformActionOnAllLineItems(delegate(InvoiceLineItem ili) { result += (Decimal)ili.CalculateSubTotal(); }); return (float)result; } float CalculateTotalTax() { Decimal result = 0M; PerformActionOnAllLineItems(delegate(InvoiceLineItem ili) { result += (Decimal)ili.CalculateTax(); }); return (float)result; }
var items = context.Bookings .Where(booking => booking.StartTime.Year == 2012) .Select(booking => new { booking.StartTime.Year, booking.StartTime.Month, DaysInMonth = EF.Functions.DateDiffDay( booking.StartTime.Date.AddDays(1 - booking.StartTime.Date.Day), booking.StartTime.Date.AddDays(1 - booking.StartTime.Date.Day).AddMonths(1) ) }) .Distinct() .OrderBy(r => r.Year) .ThenBy(r => r.Month) .ToList();
var items = context.Bookings .Select(x => new { x.StartTime, EndTime = x.StartTime.AddMinutes(x.Slots * 30) }) .OrderByDescending(x => x.EndTime) .ThenByDescending(x => x.StartTime) .Take(10) .ToList();
var items = context.Bookings .GroupBy(x => new { x.StartTime.Year, x.StartTime.Month }) .Select(x => new { x.Key.Year, x.Key.Month, Count = x.Count() }) .OrderBy(x => x.Year) .ThenBy(x => x.Month) .ToList();
Round(100 * Sum(Slots) / (decimal)(25 * DaysInMonth), 1)
var items = context.Bookings .Select(booking => new { booking.Facility.Name, booking.StartTime.Year, booking.StartTime.Month, booking.Slots, DaysInMonth = EF.Functions.DateDiffDay( booking.StartTime.Date.AddDays(1 - booking.StartTime.Date.Day), booking.StartTime.Date.AddDays(1 - booking.StartTime.Date.Day).AddMonths(1) ) }) .GroupBy(b => new { b.Name, b.Year, b.Month, b.DaysInMonth }) .Select(g => new { g.Key.Name, g.Key.Year, g.Key.Month, Utilization = SqlDbFunctionsExtensions.SqlRound( 100 * g.Sum(b => b.Slots) / (decimal)(25 * g.Key.DaysInMonth), 1) }) .OrderBy(r => r.Name) .ThenBy(r => r.Year) .ThenBy(r => r.Month) .ToList();
namespace EFCorePgExercises.Utils { public static class SqlDbFunctionsExtensions { public static decimal SqlRound(decimal value, int precision) => throw new InvalidOperationException($"{nameof(SqlRound)} method cannot be called from the client side."); private static readonly MethodInfo _sqlRoundMethodInfo = typeof(SqlDbFunctionsExtensions) .GetRuntimeMethod( nameof(SqlDbFunctionsExtensions.SqlRound), new[] { typeof(decimal), typeof(int) } ); public static void AddCustomSqlFunctions(this ModelBuilder modelBuilder) { modelBuilder.HasDbFunction(_sqlRoundMethodInfo) .HasTranslation(args => { return SqlFunctionExpression.Create("ROUND", args, _sqlRoundMethodInfo.ReturnType, typeMapping: null); }); } } }
namespace EFCorePgExercises.DataLayer { public class ApplicationDbContext : DbContext { // ... protected override void OnModelCreating(ModelBuilder modelBuilder) { // ... modelBuilder.AddCustomSqlFunctions(); // ... } } }
These are the customer-reported issues addressed in 15.8.5:
Visual Studio Tools for Xamarin now supports Xcode 10, which allows you to build and debug apps for iOS 12, tvOS 12, and watchOS 5. See how to get ready for iOS 12 and our introduction to iOS 12 for more details on the new features available.
CultureInfo culture = new CultureInfo("en-US"); DateTime tempDate = Convert.ToDateTime("1/1/2010 12:10:15 PM", culture);
string datestr = null; Console.WriteLine(Convert.ToDateTime(datestr));//0001-01-01T00:00:00 datestr = "wrong string"; Console.WriteLine(Convert.ToDateTime(datestr)); //Unhandled Exception: System.FormatException: //The string was not recognized as a valid DateTime. //There is an unknown word starting at index 0. datestr = "Tue Dec 30,2015"; Console.WriteLine(Convert.ToDateTime(datestr)); //Unhandled Exception: System.FormatException: //String was not recognized as a valid DateTime.
string datestr = null; Console.WriteLine(DateTime.Parse(datestr)); //// Exception: Argument null exception datestr = "wrong string"; Console.WriteLine(DateTime.Parse(datestr)); //// Exception: The string was not recognized as a valid DateTime. //// There is an unknown word starting at index 0. datestr = "Tue Dec 30, 2015"; //Unhandled Exception: System.FormatException: //String was not recognized as a valid DateTime. Console.WriteLine(DateTime.Parse(datestr));
string datestr = null; CultureInfo provider = CultureInfo.InvariantCulture; Console.WriteLine(DateTime.ParseExact(datestr, "mm/dd/yyyy", provider)); //Unhandled Exception: System.ArgumentNullException: //String reference not set to an instance of a String. datestr = "wrong date"; Console.WriteLine(DateTime.ParseExact(datestr, "mm/dd/yyyy", provider)); //Unhandled Exception: System.FormatException: //String was not recognized as a valid DateTime datestr = "Tue Dec 30, 2015"; Console.WriteLine(DateTime.ParseExact(datestr, "mm/dd/yyyy", provider)); //Unhandled Exception: System.FormatException: //String was not recognized as a valid DateTime. datestr = "10-22-2015"; Console.WriteLine(DateTime.ParseExact(datestr, "MM-dd-yyyy", provider)); //30/07/1394 12:00:00 ق.ظ datestr = "10-22-2015"; Console.WriteLine(DateTime.ParseExact(datestr, new string[] {"MM-dd-yyyy", "MM/dd/yyyy", "MM.dd.yyyy"}, provider, DateTimeStyles.None)); //30/07/1394 12:00:00 ق.ظ
string datestr = null; DateTime temp; Console.WriteLine(DateTime.TryParse(datestr, out temp)); Console.WriteLine(temp); //False //0001 - 01 - 01T00: 00:00 datestr = "wrong date"; Console.WriteLine(DateTime.TryParse(datestr, out temp)); Console.WriteLine(temp); //False //0001 - 01 - 01T00: 00:00 datestr = "Tue Dec 30, 2015"; Console.WriteLine(DateTime.TryParse(datestr, out temp)); Console.WriteLine(temp); //False //0001 - 01 - 01T00: 00:00
string datestr = null; DateTime temp; CultureInfo provider = CultureInfo.InvariantCulture; Console.WriteLine(DateTime.TryParseExact(datestr, "MM/dd/yyyy", provider, DateTimeStyles.None, out temp)); Console.WriteLine(temp); //False //1/1/0001 12:00:00 AM datestr = "wrong date"; Console.WriteLine(DateTime.TryParseExact(datestr, "MM/dd/yyyy", provider, DateTimeStyles.None, out temp)); Console.WriteLine(temp); //False //1/1/0001 12:00:00 AM datestr = "Tue Dec 30, 2015"; Console.WriteLine(DateTime.TryParseExact(datestr, "MM/dd/yyyy", provider, DateTimeStyles.None, out temp)); Console.WriteLine(temp); //False //1/1/0001 12:00:00 AM datestr = "10‐22‐2015"; Console.WriteLine(DateTime.TryParseExact(datestr, "MM/dd/yyyy", provider, DateTimeStyles.None, out temp)); Console.WriteLine(temp); //False //1/1/0001 12:00:00 AM datestr = "10‐22‐2015"; Console.WriteLine(DateTime.TryParseExact( datestr, "MM‐dd‐yyyy", provider, DateTimeStyles.None, out temp)); Console.WriteLine(temp); //True //30/07/1394 12:00:00 ق.ظ datestr = "10‐12‐2015"; Console.WriteLine(DateTime.TryParseExact(datestr, new string[] { "MM/dd/yyyy", "MM‐dd‐yyyy", "MM.dd.yyyy" }, provider, DateTimeStyles.None, out temp)); Console.WriteLine(temp); //True //20/07/1394 12:00:00 ق.ظ
public virtual DateTime? LockoutEndDateUtc { get; set; }
public virtual DateTimeOffset? LockoutEnd { get; set; }
2012-03-01 00:00:00-05:00
var dateString = "2012-03-01 00:00:00-05:00"; var birthDay = DateTime.Parse(dateString);
2012-02-29 11:00:00 PM
string birthDay = "2012-03-01 00:00:00-05:00"; var dtOffset = DateTimeOffset.Parse(birthDay);
var theDay = dtOffset.Date;
public static class SqlDataReaderExtensions { public static DateTime GetDateTimeUtc(this SqlDataReader reader, string name) { int fieldOrdinal = reader.GetOrdinal(name); DateTime unspecified = reader.GetDateTime(fieldOrdinal); return DateTime.SpecifyKind(unspecified, DateTimeKind.Utc); } }