0
我有一個在整個應用程序中多次使用的查詢,我想做一個函數來簡化它。作爲擴展方法的Linq查詢
我試圖讓它成爲IQueryable,ICollection,沒有任何工作。
這就是我想做的事,基本上是:
這是一個查詢:
dias = db.T_AGENDA_AGENDAMENTOS
.Where(r =>
(
r.T_AGENDA_AGENDAMENTOS_CLIENTES_PARTICIPANTE.Count(
x => new[] { 1, 2, 5, 6, 7 }.Contains(x.T_AGENDA_AGENDAMENTOS_CLIENTES_PARTICIPANTE_STATUS.COD_PARTICIPANTE_STATUS) &&
x.T_CLIENTES.IND_ATIVO == "s" &&
x.IND_ATIVO == "s") < ((r.IND_AVULSO == "s") ? 1 : r.T_AGENDA_AGENDAMENTOS_FIXOS.NUM_MAXIMO_PARTICIPANTES)
)
)
.Select(z => EntityFunctions.TruncateTime(z.DAT_INICIO))
.Distinct().ToList();
內r.T_AGENDA_AGENDAMENTOS_CLIENTES_PARTICIPANTE.Count(
這一部分是一個多次使用:
x => new[] { 1, 2, 5, 6, 7 }.Contains(x.T_AGENDA_AGENDAMENTOS_CLIENTES_PARTICIPANTE_STATUS.COD_PARTICIPANTE_STATUS) &&
x.T_CLIENTES.IND_ATIVO == "s" &&
x.IND_ATIVO == "s"
我想把它變成一個函數或者某個東西,這樣我就不需要一直複製粘貼了。
這是我已經試過了,沒有成功:
public static ICollection<T_AGENDA_AGENDAMENTOS_CLIENTES_PARTICIPANTE> Ativos(this ICollection<T_AGENDA_AGENDAMENTOS_CLIENTES_PARTICIPANTE> source, int codAgendamento)
{
return source
.Where(x => !(new[] { 3, 4, 9 }
.Contains(x.T_AGENDA_AGENDAMENTOS_CLIENTES_PARTICIPANTE_STATUS.COD_PARTICIPANTE_STATUS)) &&
x.T_CLIENTES.IND_ATIVO == "s" &&
x.IND_ATIVO == "s" &&
x.COD_AGENDAMENTO == codAgendamento)
.ToList();
}
然後使用這樣的功能:
dias = db.T_AGENDA_AGENDAMENTOS
.Where(r =>
(
r.T_AGENDA_AGENDAMENTOS_CLIENTES_PARTICIPANTE.Ativos(r.COD_AGENDAMENTO).Count() < ((r.IND_AVULSO == "s") ? 1 : r.T_AGENDA_AGENDAMENTOS_FIXOS.NUM_MAXIMO_PARTICIPANTES)
)
)
.Select(z => EntityFunctions.TruncateTime(z.DAT_INICIO))
.Distinct().ToList();
這是我得到的錯誤:
錯誤CS1061'ICollection' 不包含'Ativos'的定義,也沒有擴展方法 「Ativos」接受的類型 「ICollection的」第一個參數可以發現 (是否缺少using指令或程序集引用?)
可以做些什麼?
請在下次對齊您的代碼 –
您之所以會出現這種問題,是因爲喜歡您的帖子,您的代碼不容易閱讀,如果您需要幫助,您應該花時間編寫出色的帖子,所以人們可以很容易地理解它,沒有人想浪費額外的時間來找出可以通過更好的溝通解決的事情 –
現在來幫助你:1.爲什麼你在你不使用的擴展方法中創建一個Db上下文它。 2.你不能調用你的擴展方法,你要創建一個表達式來將它傳遞到我最初使用它的 –