Архивы по Категориям: C#

Защищено: C# загрузка картинок по ссылке

Это содержимое защищено паролем. Для его просмотра введите, пожалуйста, пароль:

Функции для работы с Excel из C#

http://www.sql.ru/forum/620401/funkcii-dlya-raboty-s-excel-iz-c (тема закрыта как неактуальная)

Сохранено: ноябрь 2009
Читать далее »

Работа с MySQL в C#

Отсюда https://kbss.ru/blog/lang_c_sharp/1.html

Надеюсь данная публикация не даст читателям повторить мои ошибки и поможет сделать изначально правильный выбор. Первое с чего бы хотелось начать это с настоятельной рекомендации: «Программируя под .NET всегда пользуйтесь MySQL .NET — Коннектором!». Можно конечно и через ADO подключаться к базе но это чревато тем что в будущем вам просто будет необходимо вносить изменения при переходе на Windows Vista и выше.
Читать далее »

Как отследить событие нажатия кнопки на клавиатуре/мышке

Тема http://www.sql.ru/forum/632552/otsledit-nazhatiya-knopok?
https://forum.antichat.ru/threads/41858/

Сохранено в апреле 2009, не проверялось
Читать далее »

Материалы по языку C#

Для начинающих
Отсюда: http://math.msu.su/~vvb/2course/Borisenko/AddEdu/CSharp/CSharp.html
Читать далее »

Mongo и C#: агрегация, pipeline

Очень старый кусок кода (~2012-13 гг.), но вдруг пригодится когда-нибудь, память освежить.

            var match = new BsonDocument 
            { { 
                    "$match", new BsonDocument 
                    {         
                        {
                            "Date", new BsonDocument 
                            { { "$lte", DateTime.Now } }
                        }
                    } 
            } };
            var group = new BsonDocument
            { {
                    "$group", new BsonDocument
                    {
                        { "_id","$Blog._id" },
                        {
                            "PublishDate", new BsonDocument 
                            { { "$max", "$Date" } }
                        }
                    }
            } };
 
            var project = new BsonDocument
            { {
                    "$project", new BsonDocument
                    {
                        { "Blog._id", "$_id" },
                        { "PublishDate", "$PublishDate" }
                    }
            } };
 
            var sort = new BsonDocument { { "$sort", new BsonDocument { { "PublishDate", -1 } } } };
            var skip = new BsonDocument { { "$skip", (page - 1) * count } };
            var limit = new BsonDocument { { "$limit", count } };
 
            var pipeline = new[] { match, group, sort, project, skip, limit };
            var lastPostsInBlogs = this.mongoContext.Posts
                .Aggregate(pipeline)
                .ResultDocuments.Select(x => BsonSerializer.Deserialize<PostDoc>(x))
                .ToList();
 
            return
                lastPostsInBlogs.Join(
                    this.mongoContext.Blogs.AsQueryable<BlogDoc>()
                        .Where(condition),
                    pb => pb.Blog.Id,
                    b => b.Id,
                    (pb, b) =>
                    new BlogItem()
                    {
                        Id = b.StrId,
                        Alias = b.Alias,
                        Title = b.Title,
                        Description = b.Info,
                        CoverFile = b.CoverFile ?? DomainAppSettings.DefaultPreview,
                        CanPost = b.Owner.AccountId == visitorId || (b.IsCommon && b.Members.Contains(visitorId)),
                        LastUpdated = b.LastUpdated,
                        LastPosts = this.mongoContext.Posts
                            .AsQueryable<PostDoc>()
                            .Where(p => p.Blog.Id == b.Id && p.PublishDate < DateTime.Now && !p.IsDeleted)
                            .OrderByDescending(p => p.PublishDate)
                            .Take(3)
                            .Select(p => new PostLine()
                            {
                                Id = p.StrId,
                                Number = p.Number,
                                BlogAlias = p.Blog.Alias,
                                Title = p.Title,
                                Date = p.Date
                            })
                    }).ToArray();

Open Dotnet

Движки для блогов
http://dotnetblogengine.net/

Home

Разное
http://www.dotnetopen.net/

Передача массива в Asp.NET через ajax

http://stackoverflow.com/questions/309115/how-can-i-post-an-array-of-string-to-asp-net-mvc-controller-without-a-form

function test()
{
    var stringArray = new Array();
    stringArray[0] = "item1";
    stringArray[1] = "item2";
    stringArray[2] = "item3";
    var postData = { values: stringArray };
 
    $.ajax({
        type: "POST",
        url: "/Home/SaveList",
        data: postData,
        success: function(data){
            alert(data.Result);
        },
        dataType: "json",
        traditional: true
    });
}
public JsonResult SaveList(List<String> values)
{
    return Json(new { Result = String.Format("Fist item in list: '{0}'", values[0]) });
}

Про MVC UI

Генерация на основе темплейтов
http://habrahabr.ru/post/165025/

JTable
http://www.jtable.org/Home/Documents
Доки
http://www.codeproject.com/Articles/277576/AJAX-based-CRUD-tables-using-ASP-NET-MVC-and-jTa#View

Подборка библиотек для таблиц

List of ASP.NET MVC grid controls

MVC Contrib
Доки http://mvccontrib.codeplex.com/wikipage?title=Grid&referringTitle=Documentation
Исходники http://mvccontrib.codeplex.com/SourceControl/latest#src/MVCContrib/UI/Grid/IGridModel.cs

Grid.Mvc
http://gridmvc.codeplex.com/

EF и Generic

Оставляю кусочек кода себе на память. Универсальный, но в моем случае требует костылей.

#region Generic
        public void CreateLang<tmodel>(TModel langModel, out IEnumerable<revisionobject> diff)
        {
            Type entityType = this.TypesModelEntity[typeof(TModel)]; //вот костыль
            var langType = this.TypesEntityLang[entityType]; //и еще один
 
            Type genericClass = typeof(EFLangRepository< ,,>);
            Type constructedClass = genericClass.MakeGenericType(typeof(TModel), entityType, langType);
 
            object repo = Activator.CreateInstance(constructedClass);
 
            diff = new List</revisionobject><revisionobject>();
            object[] args = new object[] { langModel, diff };
 
            MethodInfo magicMethod = constructedClass.GetMethod("CreateLang");
            object magicValue = magicMethod.Invoke(repo, args);
            diff = args[1] as List</revisionobject><revisionobject>;
        }
        #endregion
</revisionobject></tmodel>

Читать далее »

Update выборочных полей в EF

http://stackoverflow.com/questions/15336248/entity-framework-5-updating-a-record

db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();

Работа с полями класса

http://stackoverflow.com/questions/9210428/how-to-convert-class-into-dictionarystring-string

someObject.GetType()
     .GetProperties(BindingFlags.Instance | BindingFlags.Public)
          .ToDictionary(prop => prop.Name, prop => prop.GetValue(someObject, null))

http://stackoverflow.com/questions/4943817/mapping-object-to-dictionary-and-vice-versa/4944547#4944547

public static class ObjectExtensions
{
    public static T ToObject<T>(this IDictionary<string, object> source)
        where T : class, new()
    {
            T someObject = new T();
            Type someObjectType = someObject.GetType();
 
            foreach (KeyValuePair<string, object> item in source)
            {
                someObjectType.GetProperty(item.Key).SetValue(someObject, item.Value, null);
            }
 
            return someObject;
    }
 
    public static IDictionary<string, object> AsDictionary(this object source, BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance)
    {
        return source.GetType().GetProperties(bindingAttr).ToDictionary
        (
            propInfo => propInfo.Name,
            propInfo => propInfo.GetValue(source, null)
        );
 
    }
}
 
class A
{
    public string Prop1
    {
        get;
        set;
    }
 
    public int Prop2
    {
        get;
        set;
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        Dictionary<string, object> dictionary = new Dictionary<string, object>();
        dictionary.Add("Prop1", "hello world!");
        dictionary.Add("Prop2", 3893);
        A someObject = dictionary.ToObject<A>();
 
        IDictionary<string, object> objectBackToDictionary = someObject.AsDictionary();
    }
}

http://stackoverflow.com/questions/2051834/exclude-property-from-gettype-getproperties

public class SkipPropertyAttribute : Attribute
{
}
 
public static class TypeExtensions
{
    public static PropertyInfo[] GetFilteredProperties(this Type type)
    {
        return type.GetProperties().Where(pi => pi.GetCustomAttributes(typeof(SkipPropertyAttribute), true).Length == 0).ToArray();
    }       
}
 
public class Test
{
    public string One { get; set; }
 
    [SkipProperty]
    public string Two { get; set; }
}
 
class Program
{
    static void Main(string[] args)
    {
        var t = new Test();
        Type ty = t.GetType();
 
        PropertyInfo[] pinfo = ty.GetFilteredProperties();
        foreach (PropertyInfo p in pinfo)
        {
            Console.WriteLine(p.Name);
        }
 
        Console.ReadKey();
    }
}

http://stackoverflow.com/questions/4951233/compare-two-objects-and-find-the-differences

static class extentions
{
    public static List<Variance> DetailedCompare<T>(this T val1, T val2)
    {
        List<Variance> variances = new List<Variance>();
        FieldInfo[] fi = val1.GetType().GetFields();
        foreach (FieldInfo f in fi)
        {
            Variance v = new Variance();
            v.Prop = f.Name;
            v.valA = f.GetValue(val1);
            v.valB = f.GetValue(val2);
            if (!v.valA.Equals(v.valB))
                variances.Add(v);
 
        }
        return variances;
    }
 
 
}
class Variance
{
    public string Prop { get; set; }
    public object valA { get; set; }
    public object valB { get; set; }
}

LINQ Join vs. Contains

Хозяйке на заметку.
В данном примере всё выполняется в памяти приложения.

http://stackoverflow.com/questions/16824510/select-multiple-records-based-on-list-of-ids-with-linq

Solution with .Where and .Contains has complexity of O(N square). Simple .Join should have a lot better performance (close to O(N) due to hashing). So the correct code is:

_dataContext.UserProfile.Join(idList, up => up.ID, id => id, (up, id) => up);

And now result of my measurement. I generated 100 000 UserProfiles and 100 000 ids. Join took 32ms and .Where with .Contains took 2 minutes and 19 seconds! I used pure IEnumerable for this testing to prove my statement. If you use List instead of IEnumerable, .Where and .Contains will be faster. Anyway the difference is significant. The fastest .Where .Contains is with Set<>. All it depends on complexity of underlying coletions for .Contains. Look at this post to learn about linq complexity.Look at my test sample below:

    private static void Main(string[] args)
    {
        var userProfiles = GenerateUserProfiles();
        var idList = GenerateIds();
        var stopWatch = new Stopwatch();
        stopWatch.Start();
        userProfiles.Join(idList, up => up.ID, id => id, (up, id) => up).ToArray();
        Console.WriteLine("Elapsed .Join time: {0}", stopWatch.Elapsed);
        stopWatch.Restart();
        userProfiles.Where(up => idList.Contains(up.ID)).ToArray();
        Console.WriteLine("Elapsed .Where .Contains time: {0}", stopWatch.Elapsed);
        Console.ReadLine();
    }
 
    private static IEnumerable<int> GenerateIds()
    {
       // var result = new List<int>();
        for (int i = 100000; i > 0; i--)
        {
            yield return i;
        }
    }
 
    private static IEnumerable<UserProfile> GenerateUserProfiles()
    {
        for (int i = 0; i < 100000; i++)
        {
            yield return new UserProfile {ID = i};
        }
    }

Console output:

Elapsed .Join time: 00:00:00.0322546
Elapsed .Where .Contains time: 00:02:19.4072107

А вот про SQL

http://stackoverflow.com/questions/1200295/sql-join-vs-in-performance

If the joining column is UNIQUE and marked as such, both these queries yield the same plan in SQL Server.

If it’s not, then IN is faster than JOIN on DISTINCT.

HtmlHelper для чекбоксов

https://gist.github.com/jarrettmeyer/7539291

Enum to Dictionary с локализацией

Пример про локализацию
http://adamyan.blogspot.com/2010/02/aspnet-mvc-2-localization-complete.html

Пример с приведением enum к dictionary без лишних заморочек
http://stackoverflow.com/questions/5583717/enum-to-dictionary-c-sharp

var dict = Enum.GetValues(typeof(typFoo))
               .Cast<typFoo>()
               .ToDictionary(t => (int)t, t => t.ToString() );

Пример с generic-методом для enum
http://stackoverflow.com/questions/79126/create-generic-method-constraining-t-to-an-enum

public T GetEnumFromString<T>(string value) where T : struct, IConvertible
{
   if (!typeof(T).IsEnum) 
   {
      throw new ArgumentException("T must be an enumerated type");
   }
 
   //...
}
public abstract class EnumClassUtils<TClass>
where TClass : class
{
 
    public static TEnum Parse<TEnum>(string value)
    where TEnum : struct, TClass
    {
        return (TEnum) Enum.Parse(typeof(TEnum), value);
    }
 
}
 
public class EnumUtils : EnumClassUtils<Enum>
{
}

Наконец, собранное воедино — generic-метод, преобразующий enum к словарю на нужном языке. Может быть, надо доработать.

public static Dictionary<int, String> TranslateEnum<TEnum>() where TEnum : struct, IConvertible
        {
            if (!typeof(TEnum).IsEnum)
            {
                throw new ArgumentException("TEnum must be an enumerated type");
            }
 
            var lang = typeof(MyLangStrings);
 
            var dict = Enum.GetValues(typeof(TEnum))
               .Cast<TEnum>()
               .ToDictionary(t => (int)Enum.Parse(typeof(TEnum), t.ToString()), t =>
               {
                   var p = lang.GetProperty(t.ToString());
                   return p.GetValue(p.DeclaringType, null).ToString();
               });
            return dict;
        }
Страница 1 из 41234