2016-12-08 2 views
-1

Мне нужно объединить 4 поля и отобразить как одно поле с помощью разделителей |. Я пробовал string.Concat(), но это не сработало. Также попытался использовать string.Join(), но не может его использовать.Как объединить несколько полей, когда мы используем Entity Framework dbContext?

var result = dbContext.MyEntity 
         .Where(me=> me.field1!= null && me.field2 != null) 
         .Select(me => new MyViewModelClass() 
             { 
              Field1 = me.field1, 
              Field2 = me.field2, 
              Field3 = me.field3, 
              Field4 = me.field4, 
              Field5 = me.field5, 
              Field6 = me.field6,  
              // I need to concatenate field3, field4, field 5, field 6 by "|" separator.     
              Field = string.Concat("|", me.field3, me.field4, me.field5, me.field6) 
             }); 
return result; 

Любые предложения?

Спасибо,

+0

Можете ли вы дать нам то, что сообщение об ошибке вы получаете? – sovemp

+2

* это не сработало *, * не можем его использовать *. Вы были около шести лет, и вы все еще не знаете, как достаточно описать проблему? –

ответ

0
var result= dbContext.MyEntity.Where(me=> me.field1!= null && me.field2 != null).Select(me=> 
     new MyViewModelClass() 
     { 
      Field1= me.field1, 
      Field2= me.field2, 
      Field3= me.field3, 
      Field4= me.field4, 
      Field5= me.field5, 
      Field6= me.field6,  

      //I need to concatenate field3, field4, field 5, field 6 by "|" separator.     

      Field= string.Concat("|",me.field3).Concat("|") 
          .Concat(field4).Concat("|") 
          .Concat(field5).Concat("|") 
          .Concat(field6) 

     }); 
    return result; 
1

UPDATE Пожалуйста, следите за @ IronMan84 предложил и применять .ToList(). Кроме того, если вы хотите быть более эффективным, вы можете использовать string.format

Field = string.Format("{0}|{1}|{2}|{3}",me.field3,me.field4,me.field5,me.field6); 

Если вы используете C# 6.0 (.NET Framework> = 4.6.1), то вы можете использовать

Field = $("{me.field3}|{me.field4}|{me.field5}|{me.field6}"); 
3

Вам нужно будет поставить между вашими предложениями Where и Select, так что LINQ будет использовать поставщик LINQ-to-Objects (который может использовать строковые методы C#) вместо поставщика LINQ-to-Entities (который не может , поскольку он пытается перевести это в SQL-запрос).

Ваш код будет тогда выглядеть так:

var result = dbContext.MyEntity 
      .Where(me=> me.field1 != null && me.field2 != null) 
      .ToList() 
      .Select(me => 
       new MyViewModelClass() 
       { 
        Field1 = me.field1, 
        Field2 = me.field2, 
        Field3 = me.field3, 
        Field4 = me.field4, 
        Field5 = me.field5, 
        Field6 = me.field6,  
        Field = string.Concat("|", me.field3, me.field4, me.field5, me.field6) 
       } 
      ); 
Смежные вопросы