[英]split field a string in a linq
我以不同的方式嘗試完成此任務,但我可以使其正常運行,我有一個名為CampoConfiguracionVista
的類, CampoConfiguracionVista
定義如下:
public class CampoConfiguracionVista
{
public CampoConfiguracionVista()
{
}
public int IDCampo { get; set; }
public int IDConfiguracion { get; set; }
public string Nombre { get; set; }
public bool ValidationEspecial { get; set; }
public bool Requerido { get; set; }
public int IDTipodato { get; set; }
public int? minimo { get; set; }
public int? maximo { get; set; }
public string[] valores { get; set; }
}
我有linq,在其中我有一個稱為Valores
字段,其中包含一個字符串值,該字符串值之間用;
分開;
因此,我要完成的工作是將該字段值拆分為我通過以下兩種方式嘗試過的字符串數組:
第一:多合一
var query = (from T in db.ConfiguracionCampo
where T.IDTipificacion == idTipificacion
&& T.Campo.Activo == true
select new CampoConfiguracionVista()
{
IDCampo = T.Campo.IDCampo,
IDTipodato = T.IDTipodato,
ValidationEspecial = T.ValidationEspecial,
minimo = T.minimo,
maximo = T.minimo,
Requerido = T.Requerido,
Nombre = T.Campo.Nombre,
valores = T.Valores.Split(';')
}).ToList();
第二:我認為問題是linq無法將拆分轉換為sql,所以我做了兩個這樣的linqs *
var query = (from T in db.ConfiguracionCampo
where T.IDTipificacion == idTipificacion
&& T.Campo.Activo == true
select T);
var camposConfigurados = (from D in query select D).Select(C => new CampoConfiguracionVista()
{
IDCampo = C.Campo.IDCampo,
IDTipodato = C.IDTipodato,
ValidationEspecial = C.ValidationEspecial,
minimo = C.minimo,
maximo = C.minimo,
Requerido = C.Requerido,
Nombre = C.Campo.Nombre,
valores = C.Valores.Split(';')
}).ToList();
我究竟做錯了什么??
如果您在通過調用AsEnumerable()
運行選擇之前將數據強制進入內存,我認為您的查詢應該運行良好。
var camposConfigurados = (from D in query select D)
.AsEnumerable()
.Select(C => new CampoConfiguracionVista()
{
IDCampo = C.Campo.IDCampo,
IDTipodato = C.IDTipodato,
ValidationEspecial = C.ValidationEspecial,
minimo = C.minimo,
maximo = C.minimo,
Requerido = C.Requerido,
Nombre = C.Campo.Nombre,
valores = C.Valores.Split(',')
}).ToList();
您是用','
而不是';'
進行拆分 。
這樣可以簡化最后一個查詢
var camposConfigurados = query
.AsEnumerable() // <== this makes succeeding queries run with LINQ-to-Objects.
.Select(C => new CampoConfiguracionVista() {
IDCampo = C.Campo.IDCampo,
IDTipodato = C.IDTipodato,
ValidationEspecial = C.ValidationEspecial,
minimo = C.minimo,
maximo = C.minimo,
Requerido = C.Requerido,
Nombre = C.Campo.Nombre,
valores = C.Valores.Split(';')
}).ToList();
沒錯,LINQ to SQL不能做的某些事情( 這里是一個示例 )。 為了解決這個問題,您只需要使用LINQ to Objects來處理LINQ to SQL中沒有的位,所以您需要使用AsEnumerable之類的方法將IQueryable轉換為IEnumerable。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.