3

在 LINQPad 中,我试图打印数据库中的所有表和每个表中的行数:

this.Mapping.GetTables().Select(o => new { TableName = o.TableName, RowCount = ? })

如何计算行数?

4

6 回答 6

3

我需要做同样的事情,我只查看包含数据的表。我很快发现你必须小心你从这里拉回来的东西,因为数据是深深嵌套的。下面的查询在我的机器上运行不到一秒钟,我在数据库中有大约 266 个表(不包括视图)。我希望这能回答你的问题。

 var list = this.Mapping.GetTables()    
     .Select(o => new { 
    TableName = o.TableName, 
    Type_ = o.RowType.Type, 
    IsEntity = o.RowType.IsEntity,
    RowCount = this.GetTable(o.RowType.Type).Cast<object>().Count(),
    })
    .Where (o => o.IsEntity && o.RowCount > 0)
    .ToList();

 list.Dump();
于 2014-04-10T21:17:53.963 回答
2
this.Mapping.GetTables().Select(o => new { 
    TableName = o.TableName, 
    RowCount = (
        (IEnumerable<object>)this.GetType().GetProperty(
            o.TableName.Substring(1, o.TableName.Length-2)
    ).GetValue(this, null))
    .Count()
}).Dump();

Jason 的这个回答表示敬意,因为他展示了如何按名称查找表格。

于 2012-09-04T14:46:30.977 回答
1

试试这个:

var list = this.Mapping.GetTables()
    .Select(o => new { TableName = o.TableName, Type_ = o.Row.Type, RowCount = 0 }).ToList();

list.ForEach(x=>x.RowCount  = this.GetTable(x.Type_).Count);
list.Select(o=> new { TableName = o.TableName, RowCount = 0 });
于 2010-08-12T12:08:27.790 回答
0

试试这个:

var list = from o in this.Mapping.GetTables()
let rowCount = ExecuteQuery<int>("select count(*) from "+ o.TableName).FirstOrDefault()
 select new {
    TableName = o.TableName,
        RowCount = rowCount
  };
于 2012-09-03T11:30:12.653 回答
0

或不使用 Mapping :

this.GetType().GetProperties().Where(p => p.DeclaringType == typeof(TypedDataContext)).Select(t => new 
{ 
    TableName = t.Name,
    RowCount = ((IEnumerable<object>)(this.GetType().GetProperty(t.Name).GetValue(this, null))).Count()
}).Dump();
于 2014-05-28T09:49:45.937 回答
-4

这不是 LinqPad 问题,而是 Linq 问题。但是让我给你一个很好的 LinqPad 技巧。将 .Dump() 添加到您的查询中,看看您会得到什么——非常酷。

this.Mapping.GetTables().Select(o => new { TableName = o.TableName, RowCount = ? }).Dump()
于 2010-08-12T12:08:31.363 回答