LINQ:将多个int属性连接成一个字符串

时间:2010-02-24 18:36:43

标签: linq string casting concatenation

我有一个具有两个不同整数属性的对象,我正在尝试在Linq to Entities中获取一个新对象,将来自同一对象的两个整数属性组合为连接字符串,如下所示

List<DateRange> collection = (from d in context.dates 
select new DateRange 
{ 
  DateString = from s in context.Seasons 
  where s.SeasonID = d.DateID 
  select string.Format("{0} - {1}", s.StartYear, s.EndYear) }

).ToList<DateRange>(); 

多年的字符串连接将无法编译。

4 个答案:

答案 0 :(得分:3)

这将在LINQ to Objects中有效,前提是对象中的每个对象都是包含“Number1”和“Number2”字段或属性的类或结构:

var results = from o in objects
              select string.Format("{0} - {1}", o.Number1, o.Number2);

(但是,你的原作也应该有用......)

答案 1 :(得分:2)

如果你真的想要你写的东西,你的原始代码是有效的。但是,如果你真的想从

获得
var objects = new MyObject[]{ 
    new MyObject {Int1 = 1, Int2 = 2},
    new MyObject {Int1 = 3, Int2 = 4}};

类似1 - 2 - 3 - 4你可以写

var strings = objects.Select(o = > string.Format("{0} - {1}", o.Int1, o.Int2).ToArray();
var output = string.Join(" - ", strings);

答案 2 :(得分:2)

假设您通过LINQ to SQL / Entities连接到数据库,那么String.Format调用可能会失败,就像这些提供程序一样,select子句在数据库中执行。并非所有内容都可以从C#转换为SQL。

要将数据库结果转换为您想要的字符串,以下内容应该有效:

var temp = (
  from d in context.dates 
  from s in context.Seasons 
  where s.SeasonID == d.DateID 
  select new { s.StartYear, s.EndYear }
).ToList(); // Execute query against database now, before converting date parts to a string

var temp2 = 
  from t in temp 
  select new DateRange 
  { 
    DateString = t.StartYear + " - " + t.EndYear 
  };

List<DateRange> collection = temp2.ToList();

编辑: 我有一个额外的想法。 String.Format调用很可能是问题所在。我不确定它是否会起作用,但是一个简单的concat怎么样:

List<DateRange> collection = 
(from d in context.dates 
 select new DateRange 
 { 
   DateString = from s in context.Seasons 
   where s.SeasonID = d.DateID 
   select s.StartYear + " - " + s.EndYear
 }
).ToList<DateRange>(); 

答案 3 :(得分:1)

using System.Data.Objects.SqlClient;
    :
    :
    List<DateRange> collection = (from d in context.dates 
    select new DateRange 
    { 
      DateString = from s in context.Seasons 
      where s.SeasonID = d.DateID 
      select SqlFunctions.StringConvert((double)s.StartYear) + " - " + 
             SqlFunctions.StringConvert((double)s.EndYear)
    }).ToList<DateRange>(); 

当LINQ语句转换为SQL以便在服务器上执行时,StringConvert方法将转换为正确的转换函数。