使用Linq选择不同的内部对象
本文关键字:内部对象 Linq 选择 使用 | 更新日期: 2023-09-27 18:12:31
在SO中搜索了几个答案,但没有找到。
使用下面的类
public class DbTable
{
public string Database { get; set; }
public string Schema { get; set; }
public string Name { get; set; }
}
public class DbColumn
{
public DbTable Table { get; set; }
public string ColumnName { get; set; }
}
List<DbColumn> cols = DataAccess.GetColumns();
在cols
中,我有许多DbColumn
。其中一些具有相同的Table
我想要一个表的列表,但不同的Database.Schema.Name
我的cols
看起来像:
{"Col1", {"MyDB", "dbo", "Product"} }
{"Col2", {"MyDB", "dbo", "Product"} }
{"Col3", {"MyDB", "Sales", "Customer"} }
{"Col4", {"MyDB", "Sales", "Branch"} }
{"Col5", {"MyDB", "Sales", "Customer"} }
{"Col6", {"MyDB", "Sales", "Branch"} }
我需要的是一个List<DbTable>
包含以下对象
{"MyDB", "dbo", "Product"}
{"MyDB", "Sales", "Customer"}
{"MyDB", "Sales", "Branch"}
LINQ应该能够做到。您需要做一个Select
投影,然后进行分组或查找。像这样:
var listOFTables = cols.Select(c => c.Table).ToLookup(k => k.Name, v=> v)
.Select(k => k.First());
这将产生一个IEnumerable<DbTable>
,其中包含您期望的3个表。//
var listOFTables = cols.Select(c => c.Table)
.ToLookup(k => new {k. Database, k.Schema, k.Name}, v=> v)
.Select(k => k.First());
我很确定您可以使用自定义比较器完成此任务。
try this:
List<DbTable> ListDistinctTable = listcolum.Select(x => new { x.Table.Database, x.Table.Name, x.Table.Schema })
.Distinct()
.Select(x => new DbTable() { Database = x.Database, Name = x.Name, Schema = x.Schema })
.ToList();