在LINQ select中拼接两个字段

7

我有一个下拉列表ddCourse,我正在使用以下LINQ查询进行填充:

var db = new DataClasses1DataContext();
ddCourse.DisplayMember = "COURSE_TITLE";
ddCourse.ValueMember = "COURSE_ID";
ddCourse.DataSource = db.COURSE_MASTERs.OrderBy(c => c.COURSE_TITLE)
                                       .Select(c => new { c.COURSE_ID, c.COURSE_TITLE })
                                       .ToList();

不过,我希望在我的选择中将另一个字段与COURSE_TITLE字段连接起来。因此,我想让我的选择看起来像:

.Select( c => new {c.COURSE_ID, c.CIN + " " + c.COURSE_TITLE})

唯一的问题是,这似乎不是正确的做法。我基本上想要将c.CIN和c.COURSE_TITLE连接起来(并在中间加一个空格)。有人能给我一些指针,告诉我如何实现这个目标吗?
我之所以想这样做,是因为现在下拉列表中只显示课程标题。当它显示时,我想将课程ID号(CIN)连接到它上面。
编辑:为了澄清,我正在使用Linq-to-SQL。

在编程中,提及任何异常消息以及你使用的LINQ版本(我猜是linq-to-sql?)都非常重要。 - Gert Arnold
3个回答

16

使用此功能

.Select( c => new {c.COURSE_ID, COURSE_TITLE =string.Format("{0} {1}" ,c.CIN ,c.COURSE_TITLE)})

6
我认为只有在对象已经加载到内存中时,string.Format才能正常工作。我可能错了,但我很确定Entity Framework会因此而产生问题,而且贴出的代码看起来像是EF。 - SouthShoreAK
OrderBy 怎么样? - Si8
简单而伟大! - balron
我该如何将此转换为字符串数组? - Developer

6

您需要为匿名成员命名:

.Select( c => new {COURSE_ID = c.COURSE_ID, COURSE_TITLE = c.CIN + " " + c.COURSE_TITLE})

这个解决方案对我在LINQ到实体中的应用很有效,而string.Format则不行。谢谢! - c1phr

3

将您的Select写成这样:

.Select( c => new {c.COURSE_ID, COURSE_TITLE = c.CIN + " " + c.COURSE_TITLE})

匿名类型需要指定它们的列名,以防无法推断出来。

对于c.COURSE_ID,C#聪明地在匿名类型中生成了一个名为COURSE_ID的成员。但是对于表达式c.CIN + " " + c.COURSE_TITLE,它做不到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接