LINQPad: Как получить количество строк в таблице, используя тип MetaTable? - PullRequest
3 голосов
/ 12 августа 2010

В LINQPad я пытаюсь распечатать все таблицы в базе данных и количество строк в каждой из них:

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

Как рассчитать количество строк?

Ответы [ 6 ]

3 голосов
/ 11 апреля 2014

Мне нужно было сделать то же самое, и я искал ТОЛЬКО таблицы, содержащие данные. Я довольно быстро обнаружил, что вы должны быть осторожны с тем, что вы берете отсюда, потому что данные глубоко вложены Для выполнения запроса ниже потребовалось менее секунды, и у меня есть приблизительно 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();
2 голосов
/ 04 сентября 2012
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();

Спасибо ответу Джейсона за то, как показать, как искать таблицу по имени.

1 голос
/ 12 августа 2010

Попробуйте это:

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 });
0 голосов
/ 28 мая 2014

Или без использования картографии:

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();
0 голосов
/ 03 сентября 2012

Попробуйте это:

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
  };
0 голосов
/ 12 августа 2010

Это не проблема LinqPad, а проблема Linq. Но позвольте мне дать вам хороший совет LinqPad. Добавьте .Dump () к вашему запросу и посмотрите, что вы получите - очень круто.

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