2010-08-12 2 views

ответ

2

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

Спасибо, этот работал для меня, и это быстро. – Kamarey

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 }); 
+0

Это утончаются не хорошо. Почему вы хотите отправить прямую инструкцию SQL в БД и обойти все проверки сильного типа, доступные с запросами Linq? –

+1

Hes использует LinqPad не производственную систему, ее песочницу. – Nix

+0

Неважно. Все еще плохое предложение. Это небрежное программирование и не решает проблему. –

-4

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

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

Как добавить сюда помощь Dump? Я знаю метод Дампа и знаю, что это очень круто, но как он относится к этому вопросу? – Kamarey

+0

@ Камарей. Вы попробовали? Он покажет вам количество строк. –

+0

Я не понимаю, как здесь может помочь Дамп? Где я должен добавить его, чтобы узнать, о чем вы говорите? – Kamarey

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 
    }; 
+0

Это не работает .. некоторые ошибки компиляции – Kamarey

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(); 

Престижность this answer from Jason для показа, как посмотреть таблицу по имени.

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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^