事实证明这比我想象的要困难.基本上,系统每天都会将客户主列表的快照转储为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)远离类型化数据安排并使用数组进行操作.再次,利益不确定.
有什么想法吗?
谢谢!
我第一次涉足仿制药,并对它们有所了解.我有一个方法,旨在接受任何对象的两个列表,匹配它们各种方式并返回匹配/不匹配的对象(方法内的东西可能不是这里的关键).目的是接受任何类型的对象,无论是客户还是其他任何对象.然而,我已经遇到了让它接受'字符串'的问题,我猜是因为它没有使用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)'......
任何让这个方法接受的方法都列出了它们是字符串还是其他类?或者将字符串列表放入将被接受的类型的快捷方式?
我过去发过各种HTML电子邮件,并且已经看到了与之相关的相当大的限制.我真正需要的是具有显示/隐藏功能的区域的能力 - 单击加号或标题来切换.
我认为JS不合适,CSS可能是一种可能性.我只需要它在Outlook 2007-2010中工作.有什么建议?
谢谢!
找到 Swagger 并为“宠物”示例生成一个 WebAPI 项目后,我认为下一个逻辑步骤是生成后端数据库。然而,我遇到的导师都没有推荐这种方法。
我发现方法存根中没有实现异常,因此我认为它对数据库来说是不可知的。我的问题:
a) 是否有一种“推荐”的方法来生成 SQL 表,就像使用脚手架从模型类生成 API 一样?
b) 当 API 细节发生变化时,可接受的工作流程是什么?从 Swagger 编辑器完全重新生成服务器项目,然后手动将对存储库的调用复制到每个存根方法中?然后更改模型后使用迁移?手动复制会非常耗时。
我并不在 .net core core 或 aspnet WebAPI 之间烦恼,无论什么工作我都很乐意使用。
谢谢
我想我会在最有用的通用组件上绘制更有经验的.NET(主要是CSharp/ASP.NET)开发人员.作为涉及基于网络的图形/报告/数据可视化的项目的一部分,我需要花费大约5到7千美元用于组件,但是我希望得到的东西对于通用板块而言是有用的有没有!我目前的想法如下,欢迎任何意见:
有任何明显的遗漏吗?谢谢大家!
这个问题涉及泛型和类型以及数据表.
以下代码片段在此处和网络周围,并基于泛型类型创建数据表:
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行.
我尝试了各种方法 - 任何想法?
我有一个类(由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)
一些关于网络的一般性讨论关于按字段等定义构造函数,但鉴于其他字段工作正常,字符串有什么特别之处?有一种优雅的方法可以避免它吗?
今天早上,我开始尝试使用自定义字段属性的快速练习.尝试了很多东西并搜索了许多例子(大多数涉及类而不是字段属性),我正式陷入困境.
我的代码如下.一个特点是该类是使用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) 我的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?
我的基本需求是从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# ×9
generics ×3
.net ×2
filehelpers ×2
reflection ×2
types ×2
algorithm ×1
asp.net ×1
asp.net-core ×1
attributes ×1
components ×1
css ×1
dapper ×1
diff ×1
html ×1
html-email ×1
nullable ×1
outlook ×1
outlook-2007 ×1
postgresql ×1
swagger ×1