StringBuilder sb = new StringBuilder();
foreach (DataRow dr in ds.Tables[0].Rows)
{
sb.Append(@"<div class='item'> <img class='img-responsive' src='images/gallary/"+ dr["Image_name"].ToString() + @"' height='140' width='180' />
<h2>Lorem Ipspspsum</h2>
</div> ");
}
为每个循环使用此功能,我可以动态地将图像添加到从数据库中检索的网页。这个循环可以转换为Linq吗?如果是,那怎么样?
答案 0 :(得分:1)
我不明白为什么要改用linq解决方案。 IMO它不是更具可读性但是这样做:使用.Select
进行循环,string.Concat
将所有字符串组合在一起:
var result = string.Concat(ds.Tables[0].Rows.Select(dr =>
@"<div class='item'> <img class='img-responsive' src='images/gallary/"+ dr["Image_name"].ToString() + @"' height='140' width='180' /><h2>Lorem Ipspspsum</h2></div> "));
此外,你可以这样使用字符串插值:
var result = string.Concat(ds.Tables[0].Rows.Select(dr =>
$@"<div class='item'> <img class='img-responsive' src='images/gallary/{dr["Image_name"].ToString()}' height='140' width='180' /><h2>Lorem Ipspspsum</h2></div> "));
我可能会在任何情况下添加字符串插值,即使没有将其更改为linq解决方案
答案 1 :(得分:0)
有很多方法可以做到这一点,但在我看来,Aggregate将是'最流行的'(与其他语言中的reduce相同)。 Aggregate旨在将多个对象映射到单个对象,并且由于您正在将行数组转换为单个StringBuilder,因此这将执行您想要的操作。关于其他解决方案,他们的工作和良好,但我会说Aggregate(或Reduce)是最有效的方式,因为它是所有功能中最具功能性的解决方案(但这并不意味着更好)。
ds.Tables[0].Rows.Aggregate(new StringBuilder(), (a, dr) => a.Append(@"<div class='item'> <img class='img-responsive' src='images/gallary/"+ dr["Image_name"].ToString() + @"' height='140' width='180' />
<h2>Lorem Ipspspsum</h2>
</div> "));
但这样做会更好吗,不会与你的代码完全相同。