[英]C# how to define an anonymous type with IQueryable?
根據開關/情況,變量設置為 EF 鏈接。 但我不知道如何定義變量groupByLeadIdQuery
IQueryable groupByLeadIdQuery = null;
switch (...)
{
case ...:
{
groupByLeadIdQuery = context.HistoryRecords.GroupBy(h => h.ProductId)
.Select(g => new
{
Id = g.Key,
Retributions = g.Sum(s => s.Retribution),
});
}
break;
case ...:
{
groupByLeadIdQuery = null;
}
...
}
稍后在代碼中,我根據變量是否為 null 來處理結果
if (groupByLeadIdQuery2 != null)
{
var list = groupByLeadIdQuery2.ToList(); <<<<<<<<<<<<<<<<<<
...
}
編譯器抱怨: IQueryable 不包含 ToList 的定義
我試過了
IQueryable<T> groupByLeadIdQuery = null;
IQueryable<Anonymous> groupByLeadIdQuery = null;
IQueryable<'a> groupByLeadIdQuery = null;
var groupByLeadIdQuery = null;
沒有任何作用。
你能啟發我嗎?
感謝您的幫助
要擁有 ToList 方法,您應該將 IQueryable 變量定義為 List。 例如IQueryable<Product>
或類似的東西。 如果沒有特定類型,您可以只使用 var 並獲取您的匿名類型。
在您的情況下,我認為最簡單的解決方案是設置默認值,而不是按情況更新。 但是在這種情況下,您必須為每種情況設置相同的匿名類型,否則您必須強制轉換類型。
var groupByLeadIdQuery = context.HistoryRecords.GroupBy(h => h.ProductId)
.Select(g => new
{
Id = g.Key,
Retributions = g.Sum(s => s.Retribution),
});
switch (...)
{
case ...:
{
groupByLeadIdQuery = ...;
}
break;
case ...:
{
groupByLeadIdQuery = null;
}
...
}
如果這不能解決您的問題,您應該使用接口,一個包含您需要的屬性的接口,或者可能是動態。
切換表達式在這里可能是一個不錯的選擇。 根本問題是您需要IQueryable<T>
<T>
中的 <T> ,但它是“不可發音的”,因此您只能使用var
來聲明它,但是:
var query = whatever switch {
SomeCase => your.Query.Here...,
_ => null,
};
請注意,雖然您可以根據需要擁有盡可能多的案例行,但它們必須具有相同的形狀才能正常工作。
您可以使通用Group By
方法如下所示:
public async Task<List<T>> GetGroupByResult<T>(string groupByItem) where T : class
{
var groupByLeadIdQuery = _dbContext.Set<T>();
switch (groupByItem)
{
case "ProductId":
{
groupByLeadIdQuery = groupByLeadIdQuery.GroupBy(h => h.ProductId)
.Select(g => new
{
Id = g.Key,
Retributions = g.Sum(s => s.Retribution),
});
break;
}
case "Other":
{
groupByLeadIdQuery = ...;
break;
}
default:
{
groupByLeadIdQuery = null;
}
}
if (groupByLeadIdQuery != null)
return await groupByLeadIdQuery.ToListAsync();
return default;
}
它可以用於您的任何實體。
來自大王
groupByLeadIdQuery2.Cast<dynamic>().ToList()
奇跡般有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.