在Linq查询中连接字符串和小数

时间:2015-07-08 11:32:15

标签: c# linq

我正在VS2010,Framework 4.0,C#和silverlight 4中编写应用程序。

我有一个简单的类和Linq查询。

课程是:

public class pmDues
    {
        [Key]
        public int DuesID { get; set; }
        [DataMember]
        public string dues_type { get; set; }
        public decimal dues_amount { get; set; }
    }

在我的DomainService中,我有以下IQueryable:

public IQueryable<pmdues> GetDues()
   {
      return from dues in ObjectContext.tblDuesRates
                  orderby dues.due_type
         select new pmDues()
            {
              DuesID = dues.id,
              dues_type = dues.due_type,
              dues_amount = dues.amount.Value
              };
        }

到目前为止很好.......但是!

我真正想要的是显示连接的dues_type + dues_amount。 dues_amount在SQL Server表中声明为十进制。我不知道的是在哪里以及如何将dues_type与dues_amount连接起来。我试过以下但是没有用。我应该在课堂上连接吗?如果是这样的话。仍然是C#的新手。

public IQueryable<pmdues> GetDues()
   {
      return from dues in ObjectContext.tblDuesRates
                  orderby dues.due_type
         select new pmDues()
            {
              DuesID = dues.id,
              dues_type = dues.due_type + " - " + 
                          dues.amount.Value.ToString(),
              dues_amount = dues.amount.Value
              };
        }

由于

5 个答案:

答案 0 :(得分:2)

使用SqlFunctions.StringConvert,这可以在EF6 //DRAG CONDITIONS counterForDropped = $("#left-panel").find('.draggable').length; $("#drag-1").draggable({ containment: '.zone-container', snap: '#drag-1', revert: 'invalid' }); $("#drag-2").draggable({ containment: '.zone-container', snap: '#drag-2', revert: 'invalid' }); $("#drag-3").draggable({ containment: '.zone-container', snap: '#drag-3', revert: 'invalid' }); //DROP & ACTION $("#drop-1").droppable({ accept: "#drag-1", drop: function (event, ui) { counterForDropped--; checkLastDrop(); } }); $("#drop-2").droppable({ accept: "#drag-2", drop: function (event, ui) { counterForDropped--; checkLastDrop(); } }); $("#drop-3").droppable({ accept: "#drag-3", drop: function (event, ui) { counterForDropped--; checkLastDrop(); } }); function checkLastDrop() { if (counterForDropped === 0) { alert('last dropped'); } } 中找到(以前版本中为System.Data.Entity.SqlServer),以便将System.Data.Objects.SqlClient转换为decimal:< / p>

string

答案 1 :(得分:1)

SqlFunctions类,它具有实用方法,以特殊方式处理,同时将表达式树转换为sql查询,以及为什么在db级别调用,但它仅适用于实体框架&gt; 4(如果我没有弄错的话)。

但是你可以在.NET端连接你的值。只需使用AsEnumerable进行此类操作即可。

public IEnumerable<pmdues> GetDues()
{
    var pmDues = 
        from dues in ObjectContext.tblDuesRates
        orderby dues.due_type
        select new 
        {
            DuesID = dues.id,
            dues_type = dues.due_type,
            dues_amount = dues.amount.Value
        };    

    return pmDues
             .AsEnumerable()
             .Select(d => 
                 new pmDues()
                 { 
                     DuesID = d.DuesID, 
                     DuesType = d.dues_type + " - " + 
                                d.dues_amount.ToString()
                 });
}

但您无法返回IQueryable,从而在db级别执行过滤或排序。

如果调用GetDues的上层代码确实应该执行此类操作, 您可以为方法提供Func<IQueryable<pmdues>, IQueryable<pmdues>>类型的其他参数,并在AsEnumerable之前调用它。

答案 2 :(得分:0)

尝试删除.ToString()

   public IQueryable<pmdues> GetDues()

      return from dues in ObjectContext.tblDuesRates
              orderby dues.due_type
     select new pmDues()
        {
          DuesID = dues.id,
          dues_type = dues.due_type + " - " + 
                      dues.amount.Value,
          dues_amount = dues.amount.Value
          };
    }

答案 3 :(得分:0)

在这里做出一个假设,但请试一试,看看它是否适合你。

public IQueryable<pmdues> GetDues()
{
    return (from dues in ObjectContext.tblDuesRates
           orderby dues.due_type).ToList().
           Select(x => new pmDues
           {
              DuesID = x.id,
              dues_type = string.Format("{0} - {1}",
                          x.due_type,
                          x.amount),
              dues_amount = x.amount.Value
           }).AsQueryable();
}

答案 4 :(得分:0)

这里有什么问题?您始终可以使用字符串连接:String.Concat(a, b, c.ToString())a + b + c.ToString(),并将此值写入字符串&#39; dues_type&#39; 。这有什么问题?