我有一个用于绑定的ObservableCollection<T>
,我想把它放入String.Join
语句中,但我不明白它为什么会给出我得到的结果,以及如何修复它?
这是我用来得到结果的代码,
首先,我通过这个LINQ查询获得我需要的数据
public static IEnumerable<string> GetNursingHomeNames(string home)
{
return DataContext.NursingHomeNameServerTables.Where(p => p.Nursing_Home_Section == home)
.Select(p => p.Nursing_Home_Name).Distinct();
}
然后我将其放入ObservableCollection<T>
中(您可能想知道为什么我没有将ObservableCollection<T>
与LINQ查询一起使用,但我有自己的原因。)
public static void NursingHomeNamesCollection(ObservableCollection<string> nursingHomeNames, string nursingHomeSection)
{
var homeNames = GetNursingHomeNames(nursingHomeSection);
if (homeNames == null)
{
return;
}
foreach (var item in homeNames)
{
nursingHomeNames.Add(item);
}
}
这是主窗口中的属性
public ObservableCollection<string> NursingHomeNames { get; set; } =
new ObservableCollection<string>();
然后
然后我使用Join
来获得我需要的特定目的的结果,
var result = String.Join(@",", NursingHomeNames.ToList());
这给出了以下结果,其中没有分隔符,只有一个空间,
foo bar bat baz
然而,如果只是这样做,
ObservableCollection<string> observableCol = new ObservableCollection<string>() { "foo", "bar", "bat", "baz" };
var result = String.Join(@",", observableCol.ToList());
显示的结果带有适当的分隔符。
foo,bar,bat,baz
为什么要这样做,有没有办法确保分隔符正确放置
我知道我必须遵守我的命名惯例。
编辑:在调试器中,这就是我所看到的,
将集合分配给名为data
的变量并在Watch Window
中查看结果时
var data = NursingHomeNames.ToList();
Count=4
[0]"foo">
[1] "条形">
[2] "蝙蝠">
[3] "baz">
但是,我不能使用任何其他不使用从数据库中提取数据的LINQ查询的代码来重现这一点。我尝试制作一个新的列表,并通过相同的代码传递该列表,但没有出现错误。很抱歉,我不能发布一个可以复制的例子。
事实证明,经过数周的努力,@Panagiotis Kanavos和@CodeCaster做出了评论。
我使用了一个看起来像逗号的Unicode字符,因此它创建了一个与我预期不同的行为。
在方法中
public static void NursingHomeNamesCollection(string nursingHomeSection)
您可以输入字符串参数。在此方法作用域中之后,您将此字符串添加到静态集合中,但此作用域中的项是字符。
foreach (var item in homeNames)
您正试图一次添加一个字符并连接一个大字符串。您需要获取该方法的输入集合。