我有一个具有两个不同整数属性的对象,我正在尝试在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>();
多年的字符串连接将无法编译。
答案 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方法将转换为正确的转换函数。