Это - основной вопрос. У меня есть основной настроенный проект SL4/RIA, и я хочу создать новый метод в доменном сервисе и возвратить некоторые данные из него. Я не уверен надлежащий самый легкий способ сделать это.. Я должен обернуть его в ToList ()? Я неясен, как обработать этот анонимный тип, который был, создают.. что самый легкий путь состоит в том, чтобы возвратить эти данные?
public IQueryable<ApplicationLog> GetApplicationLogsGrouped()
{
var x = from c in ObjectContext.ApplicationLogs
let dt = c.LogDate
group c by new { y = dt.Value.Year, m = dt.Value.Month, d = dt.Value.Day } into mygroup
select new { aaa = mygroup.Key, ProductCount = mygroup.Count() };
return x;
// return this.ObjectContext.ApplicationLogs.Where(r => r.ApplicationID < 50);
}
Не может неявно преобразовать тип 'Система. Linq. IQueryable <AnonymousType#1>' к 'Системе. Linq. IQueryable <CapRep4. Сеть. ApplicationLog>'. Явное преобразование существует (Вы скучаете по броску?) 58 20 CapRep4. Сеть
Анонимный тип похож на любой другой класс, но создается компилятором. Компилятор генерирует что-то вроде:
class AnonymousType1 {
public AnonymousType2 Key { get; set; }
public int ProductCount { get; set; }
}
class AnonymousType2 {
public int y { get; set; }
public int m { get; set; }
public int d { get; set; }
}
Эти классы вам недоступны, поэтому у вас нет другого выбора, кроме как использовать собственный класс, соответствующий определению Anonymous1, если вы хотите сохранить строгую типизацию. Затем вы будете использовать его так: новый MyClass {Key = myGroup.Key, ProductCount = mygroup.Count ()}
.
Попробуйте использовать KeyValuePair
public IQueryable<KeyValuePair<ApplicationLog,int>> GetApplicationLogsGrouped()
{
var x = from c in ObjectContext.ApplicationLogs
let dt = c.LogDate
group by c into mygroup
select new KeyValuePair<ApplicationLog,int>( mygroup.Key,mygroup.Count()) ;
return x;
// return this.ObjectContext.ApplicationLogs.Where(r => r.ApplicationID < 50);
}
Вам нужно будет создать свой собственный класс для проекции.
public class ApplicationLogStatistic
{
public ApplicationLog ApplicationLog { get; internal set; }
public int ProductCount { get; internal set; }
}
...
public IQueryable<ApplicationLogStatistic> GetApplicationLogsGrouped()
{
var x = // OP's code, except for select
select new ApplicationLogStatistic
{
ApplicationLog = mygroup.Key,
ProductCount = mygroup.Count()
};
return x;
}