小编Gli*_*kot的帖子

使用c#有效识别CSV文件中已更改的字段

事实证明这比我想象的要困难.基本上,系统每天都会将客户主列表的快照转储为CSV.它包含大约120000条记录和60个字段.大约25mb.无论如何,我想报告在一个快照和另一个快照之间发生变化的值.它不是计划文件差异,因为它必须与包含客户唯一编号的最左侧列值匹配.可以插入/删除行等.所有字段都是字符串,包括参考编号.

我已经用LINQ编写了一个解决方案,但它随着更大的数据集而死.对于10000条记录,需要17秒.对于120000,比较两个文件需要将近2个小时.现在它使用优秀且免费的'filehelpers'http: //www.filehelpers.com/来加载数据,这只需要几秒钟,然后.但是检测哪些记录已经改变更成问题.以下是2小时查询:

    var changednames = from f in fffiltered
                       from s in sffiltered
                       where f.CustomerRef == s.CustomerRef &&
                       f.Customer_Name != s.Customer_Name
                       select new { f, s };
Run Code Online (Sandbox Code Playgroud)

你会推荐什么方法?我想立即将列表"修剪"给那些有某种变化的人,然后将我更具体的比较应用于那个小子集.我的一些想法是:

a)使用字典或Hashsets-虽然早期的测试并没有真正显示出改进

b)对操作进行分区 - 使用客户参考字段中的第一个字符,并仅与具有相同字符的字符匹配.这可能涉及创建许多单独的集合,但似乎非常不优雅.

c)远离类型化数据安排并使用数组进行操作.再次,利益不确定.

有什么想法吗?

谢谢!

c# algorithm diff

5
推荐指数
1
解决办法
1423
查看次数

c#Generics:将List <string>传递给期望List <T>的方法

我第一次涉足仿制药,并对它们有所了解.我有一个方法,旨在接受任何对象的两个列表,匹配它们各种方式并返回匹配/不匹配的对象(方法内的东西可能不是这里的关键).目的是接受任何类型的对象,无论是客户还是其他任何对象.然而,我已经遇到了让它接受'字符串'的问题,我猜是因为它没有使用new()关键字进行初始化,并且不像普通的实例类.

所以,我有一个像这样的方法声明:

public static compareResult<T> stepCompare<T>(List<T> leftList, List<T> rightList, Comparison<T> IDComparer = null, Comparison<T> lowLevelComparer = null, bool confirmUniqueness = true) where T : IComparable, new()
Run Code Online (Sandbox Code Playgroud)

不可否认,在最后添加where子句是为了响应错误"无法创建变量类型'T'的实例,因为它没有new()约束".这出现在方法中的一条线上

T lastItem = new T();
Run Code Online (Sandbox Code Playgroud)

但是,现在,如果我试图将其传递两次Lists<string>,它会说" 'string' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'MF.Comparers.stepCompare<T>(System.Collections.Generic.List<T>, System.Collections.Generic.List<T>, System.Comparison<T>, System.Comparison<T>, bool)'......

任何让这个方法接受的方法都列出了它们是字符串还是其他类?或者将字符串列表放入将被接受的类型的快捷方式?

c# generics argument-passing

5
推荐指数
2
解决办法
2963
查看次数

HTML电子邮件中的可折叠表(Outlook 2007-2010)

我过去发过各种HTML电子邮件,并且已经看到了与之相关的相当大的限制.我真正需要的是具有显示/隐藏功能的区域的能力 - 单击加号或标题来切换.

我认为JS不合适,CSS可能是一种可能性.我只需要它在Outlook 2007-2010中工作.有什么建议?

谢谢!

html css outlook html-email outlook-2007

5
推荐指数
1
解决办法
2万
查看次数

从 Swagger WebAPI 项目生成 SQL Server DB

找到 Swagger 并为“宠物”示例生成一个 WebAPI 项目后,我认为下一个逻辑步骤是生成后端数据库。然而,我遇到的导师都没有推荐这种方法。

我发现方法存根中没有实现异常,因此我认为它对数据库来说是不可知的。我的问题:

a) 是否有一种“推荐”的方法来生成 SQL 表,就像使用脚手架从模型类生成 API 一样?

b) 当 API 细节发生变化时,可接受的工作流程是什么?从 Swagger 编辑器完全重新生成服务器项目,然后手动将对存储库的调用复制到每个存根方法中?然后更改模型后使用迁移?手动复制会非常耗时。

我并不在 .net core core 或 aspnet WebAPI 之间烦恼,无论什么工作我都很乐意使用。

谢谢

c# swagger asp.net-web-api2 swagger-codegen

5
推荐指数
1
解决办法
4701
查看次数

"必须拥有".NET组件:经验丰富的开发人员?

我想我会在最有用的通用组件上绘制更有经验的.NET(主要是CSharp/ASP.NET)开发人员.作为涉及基于网络的图形/报告/数据可视化的项目的一部分,我需要花费大约5到7千美元用于组件,但是我希望得到的东西对于通用板块而言是有用的有没有!我目前的想法如下,欢迎任何意见:

  • Dundas Chart(已经买了,我有很棒的使用体验)
  • Telerik .NET
  • DevExpress DXperience(对Telerik组件有点欺骗,但我想如果有一个奇怪的bug或限制你有另一个作为后备).两者看起来都很全面.
  • 正在考虑像godiagram这样的图表类型控件 - 它看起来并不像旧的Corgent/Dundas图表那样神奇,但我现在找不到更好的一个.如果有人知道一个很好的抗锯齿并适合工作流程类型图表,请告诉我!
  • 考虑到Telerik SiteFinity许可证,它看起来相当不错,但不确定它与非cms类型页面的结合程度如何,所以陪审团已经结束了.

有任何明显的遗漏吗?谢谢大家!

.net c# asp.net components

4
推荐指数
2
解决办法
1321
查看次数

c# - 从类(不是实例列表)创建数据表

这个问题涉及泛型和类型以及数据表.

以下代码片段在此处和网络周围,并基于泛型类型创建数据表:

public static DataTable ListToDataTable<T>(List<T> list)
{
    DataTable dt = new DataTable();

    foreach (PropertyInfo info in typeof(T).GetProperties())
    {
        dt.Columns.Add(new DataColumn(info.Name, info.PropertyType));
    }
    foreach (T t in list)
    {
        DataRow row = dt.NewRow();
        foreach (PropertyInfo info in typeof(T).GetProperties())
        {
            row[info.Name] = info.GetValue(t, null);
        }
        dt.Rows.Add(row);
    }
    return dt;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用优秀的FileHelpers库将批量记录导入SQL Server.要使用SqlBulkCopy,我需要一个包含给定类型列的数据表.Filehelpers可以在运行时读取.cs文件并基于此创建您的类型.例如:

System.Type userType = null;
userType = ClassBuilder.ClassFromSourceFile("myclassfile.cs");
Run Code Online (Sandbox Code Playgroud)

我想改变上面的方法,所以它只是在传递一个类型时为我创建列(例如'userType').即方法签名将是这样的:

public static DataTable TypeToDataTable<T>(<T> myType)
Run Code Online (Sandbox Code Playgroud)

并将返回一个包含列的空数据集,准备添加userType行.

我尝试了各种方法 - 任何想法?

c# generics reflection types system.data.datatable

4
推荐指数
2
解决办法
1万
查看次数

c#中的类(带有文件助手) - 当其他可空类型不是时,可以为空的字符串给出错误

我有一个类(由filehelpers使用),当我尝试定义一个可空字符串时,它给出了一个错误:

public String? ItemNum;
Run Code Online (Sandbox Code Playgroud)

错误是:

 Error  1   The type 'string' must be a non-nullable value type in order 
 to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'
Run Code Online (Sandbox Code Playgroud)

即使使用小写字母也会出现这种情况string,尽管我还没有看到它们之间的区别.

使用其他类型,如int,decimal等是好的:

public decimal? ItemNum;
Run Code Online (Sandbox Code Playgroud)

一些关于网络的一般性讨论关于按字段等定义构造函数,但鉴于其他字段工作正常,字符串有什么特别之处?有一种优雅的方法可以避免它吗?

.net c# generics filehelpers nullable

4
推荐指数
1
解决办法
1310
查看次数

从C#中的自定义字段属性获取值

今天早上,我开始尝试使用自定义字段属性的快速练习.尝试了很多东西并搜索了许多例子(大多数涉及类而不是字段属性),我正式陷入困境.

我的代码如下.一个特点是该类是使用classbuilder在FileHelpers中构建的.我的各种部分成功尝试确实设法从这个类获得字段名,所以我相信这部分工作正常.

我想做的(根据代码中的注释)是a)遍历字段,b)为每个字段运行,查看DBDataTypeAttribute属性是否存在,以及c)看似最难的部分 - 从属性中获取值(FieldType字符串) ,和AllowNulls布尔).

任何评论赞赏!

标记

class Program
{
    static void Main(string[] args)
    {
        // Desired output:
        System.Type userType = null;
        userType = ClassBuilder.ClassFromString(@"
                                                public class ExpenseReport
                                                {
                                                    [FieldQuoted('""', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
                                                    [DBDataTypeAttribute(FieldType = ""varchar(1000)"", AllowNulls = true)]
                                                    public String UniqueID;
                                                    [FieldQuoted('""', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)]
                                                    public String ERNum;
                                                }");

        object[] attributes;
        attributes = userType.GetCustomAttributes(typeof(DBDataTypeAttribute), true);
        foreach (Object attribute in attributes)
        {
            // Would like to be able to ID for each field whether the DBDataTypeAttribute is present, and get the …
Run Code Online (Sandbox Code Playgroud)

c# filehelpers attributes

3
推荐指数
1
解决办法
5274
查看次数

从Dapper / PostgreSQL返回插入的项目的UUID

我的ASP.Net Core 2.1 Web API项目中有一个模型对象,如下所示:

public class Tenant
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且正在像这样在postgres中执行插入:

public async Task<int> CreateItem(Tenant item)
{
    return await db.ExecuteAsync($@"INSERT INTO tenants (Name) VALUES (@Name)", item);
}
Run Code Online (Sandbox Code Playgroud)

我需要Guid来驱动后续逻辑。它返回受影响的行(1)。我的研究表明,有一些技巧可用于获取自动增量ID(例如使用“ MAX”等)。

有没有办法做到这一点,最好是通过dapper?还是我需要退回到ADO.Net?

c# postgresql dapper asp.net-core

3
推荐指数
1
解决办法
937
查看次数

通过c#中的反射获得'基本'数据类型而不是奇怪的可空类型

我的基本需求是从LINQ to SQL查询生成的匿名类型中获取数据类型.

我有一段代码(比我能写的更聪明,因为我还没有深入研究过反射)从匿名类型中返回数据类型,并且对于linq2sql属性中标记为'not nullable'的元素非常有效.所以,如果我有一个字符串,它将作为System.String返回.但是,当元素可以为空时,我最终会得到它的"全名":

{Name ="Nullable 1" FullName = "System.Nullable1 [[System.Decimal,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]"}

在这种情况下,我想要提取的是System.Decimal类型(在字符串或其他情况下,我只想要System.String).我查看了属性,找不到任何似乎存储它的东西.

    private static Dictionary<string, Type> GetFieldsForType<T>(IEnumerable<T> data)
    {
        object o = data.First();

        var properties = o.GetType().GetProperties();

        return properties.ToDictionary(property => property.Name, property => property.PropertyType);
    }
Run Code Online (Sandbox Code Playgroud)

LINQ查询(我认为这不重要):

var theData = from r in db.tblTestEdits select new { myitem = r.textField, mydecimal = r.decimalField }; 
Run Code Online (Sandbox Code Playgroud)

我发现这个链接似乎试图解决类似的问题.
http://ysgitdiary.blogspot.com/2010/02/blog-post.html

虽然它似乎返回类型的"字符串"而不是实际类型,这是我需要的.不知道如何转换这样的东西.

非常感谢大家.

c# reflection types anonymous-types

2
推荐指数
1
解决办法
1448
查看次数