C# linq-选择新上下文中两个字段的格式字符串

C# linq-选择新上下文中两个字段的格式字符串,c#,linq,C#,Linq,我有一对多关系的外国表。我将linq查询写为左连接等价项,并通过相关的id字段实现组 from p in db.personal join pn in (from t in db.phoneNumbers group t by t.personID into g select new { id = g.Key, number = g.Select(t => t.number), prefix = g.Sel

我有一对多关系的外国表。我将linq查询写为左连接等价项,并通过相关的id字段实现组

from p in db.personal join pn in
  (from t in db.phoneNumbers
   group t by t.personID into g
   select new { id = g.Key, 
                number = g.Select(t => t.number), 
                prefix = g.Select(t => t.prefix) 
              }).AsEnumerable() 
  on p.ID equals pn.id 
  into lPN from lpn in lPN.DefaultIfEmpty()
//join wsd in db.basicOperations on p.ID equals wsd.personID
where p.ID == id.Value
select new partialPersonDetailsViewModel()
{
  id = id.Value,
  genderType = p.genderType,
  sPhoneNumbers="(" +lpn.prefix+") "+lpn.number
}).FirstOrDefault();
但是在
sPhoneNumbers=“(“+lpn.prefix+”)”+lpn.number
此位置VS通知我错误:

错误1运算符“+”不能应用于“System.Collections.Generic.IEnumerable”和“System.Collections.Generic.IEnumerable”类型的操作数


请帮助我传递此错误并解决问题。

lpn.prefix和
lpn.number
都被评估为
g.Select(…)
,因此实际上它们是
IEnumerable
(与错误消息声明的完全相同)

将它们评估为
g.Select(…).FirstOrDefault()
应该对您有所帮助,因为它将从
IEnumerable
中提取类型
T
的值

更新:

在您的情况下,当
lpn.prefix
lpn.number
实际上是值列表时,您需要将这些列表串联起来-您可以使用如下方式:

sPhoneNumbers = String.Join("; ", 
                            lpn.prefix.Select((p, i) => 
                             String.Format("({0}){1}", 
                                            p, 
                                            lpn.numbers.Skip(i).Take(1).FirstOrDefault())));
或者您可以使用
Enumerable.Zip
方法,正如@Chris在评论中建议的那样:

sPhoneNumbers = String.Join("; ", 
                           lpn.prefix.Zip(lpn.numbers, 
                                         (s, s1) => string.Format("({0}){1}", s, s1)));

谢谢是的,当我尝试FirstOrDefault()时,它可以工作。但存在“一对多”的关系。我想从手机返回一个字符串,比如(12)4589524;(077) 7090701(077) 7090701; (050)2561024,而不仅仅是(12)4589524@loviji在本例中,您需要连接两个列表。请参阅更新的答案。要对两个列表的相应项执行操作,请使用
Zip
方法。看看我很久以前问过的一个问题。它省去了手动索引到第二个数组中的麻烦,从而提高了效率。@Chris谢谢,没有意识到
Zip
方法。看起来很优雅。我遇到它是因为我认为“肯定会有这样的东西存在”,然后发现它确实存在