我有一个包含三列的SQL Server表:
表格1
col1 int
col2 int
col3 string
Run Code Online (Sandbox Code Playgroud)
我为所有三列定义了一个唯一约束 (col1, col2, col3)
现在,我有一个.csv文件,我想在此表中添加记录,*.csv文件可以有重复记录.
我在上面的场景中搜索了各种避免重复的选项.以下是适合我的三个选项.请看一下并提出一些关于每种方法的优点/缺点的想法,以便我可以选择最好的方法.
选项1 :
首先避免重复,即从csv文件向列表添加对象时.我用过HashSet<T>
了这个并覆盖了类型T下面的方法:
public override int GetHashCode()
{
return col1.GetHashCode() + col2.GetHashCode() + col3.GetHashCode();
}
public override bool Equals(object obj)
{
var other = obj as T;
if (other == null)
{
return false;
}
return col1 == other.col1
&& col2 == other.col2
&& col3 == other.col3;
}
Run Code Online (Sandbox Code Playgroud)
选项#2
有List<T>
代替HashSet<T>
.
添加所有对象后删除重复项 List<T>
List<T> distinctObjects = allObjects
.GroupBy(x => new …
Run Code Online (Sandbox Code Playgroud) 我在sql表中有5列,我需要所有5列作为输出但在三列上具有不同的操作
需要在三列上返回具有不同操作的所有列
如何实现这一目标?
Timestamp Name State Context
2013-06-24 11:51:03.2550000 tst1 Started E1
2013-06-24 11:56:03.2550000 tst1 Completed E1
2013-06-24 11:51:03.2550000 tst1 Started E1
2013-06-24 11:56:03.2550000 tst1 Completed E1
2013-06-24 11:45:03.2550000 tst1 Started E1
2013-06-24 11:50:03.2550000 tst1 Completed E1
2013-06-24 11:45:03.2550000 tst1 Started E1
2013-06-24 11:50:03.2550000 tst1 Completed E1
Run Code Online (Sandbox Code Playgroud)
在这里,我通过使用下面的查询在三列上应用distinct来获得上表的所有不同结果.但我需要这三个列的不同之处还需要选择上下文列而不在Context列上应用distict
SELECT DISTINCT时间戳,名称,状态FROM TableName group by Timestamp,Name,State
改述我的问题:
我需要从上表中选择唯一的列.这里只有unquie列选择被视为时间戳,名称,状态
Timestamp Name State Context
2013-06-24 11:51:03.2550000 tst1 Started E1
2013-06-24 11:56:03.2550000 tst1 Completed E1
2013-06-24 11:45:03.2550000 tst1 Started E1
2013-06-24 11:50:03.2550000 tst1 Completed E1
Run Code Online (Sandbox Code Playgroud)