【问题标题】:how to return comma seperated values from within foreach loop如何从foreach循环中返回逗号分隔值
【发布时间】:2016-04-24 20:42:34
【问题描述】:

这就是我想要达到的目标:

var result = (string)null;
foreach (var tagId in MultipleTags)
            { 
              result = string.Join(",", db.Tags.Where(t => t.TagId == tid).Select(e => e.TagName));
            }

这个结果变量应该以逗号分隔的形式保存所有值,而 MultipleTags 包含一组 id,因此它会迭代不止一次。

我应该怎么写。请建议我。 我怀疑这行写得是否正确。

db.Tags.Where(t => t.TagId == tid).Select(e => e.TagName)

请给我一些建议。

【问题讨论】:

  • 假设Where(t => t.TagId == tid) 只返回一个值(即TagId 是唯一键),那么您的代码将只返回一个值(因此没有任何“加入”)
  • 我知道这就是为什么我要问如何将逗号分隔的值返回给这个结果变量,因为我必须根据 tagId @StephenMuecke 选择标记名
  • 你需要一个.Contains() 来获得所有与Tags 匹配的MultipleTags - Fabio Luz 的回答应该如此。
  • 那么,result +=?阅读How to Ask 并展示示例输入和输出,以及您尝试过的内容。

标签: asp.net-mvc entity-framework linq foreach linq-to-entities


【解决方案1】:

这就是诀窍:

//assuming that MultipleTags is an array of "ids"
var result = db.Tags.Where(t => MultipleTags.Contains(t.TagId)).Select(e => e.TagName).ToList().Aggregate((a, b) => a + "," + b);

【讨论】:

  • LINQ to Entities 无法识别方法 'System.String Aggregate[String](System.Linq.IQueryable1[System.String], System.Linq.Expressions.Expression1[System.Func`3[System.String,System.String,System .String]])' 方法,并且该方法不能翻译成存储表达式。这就是我要回来的,还有一件事我要传递给控制器​​ IEnumerable MultipleTags 作为参数@Fabio Luz
【解决方案2】:

也试试这个

var result = db.Tags.Where(t => MultipleTags.Contains(t.TagId)).ToList().ForEach((item) =>
            {
               item.TagName = item.id + "," + item.TagName;
            });

【讨论】:

    【解决方案3】:

    试试这个

       var result = (string)null;
       result=string.Join(",", (from a in db.Tags join m in MultipleTags on a.TagId equals m select a.TagName));
    

    【讨论】:

      猜你喜欢
      • 2021-06-23
      • 2020-10-27
      • 2016-12-04
      • 2021-06-17
      • 2013-02-20
      • 2012-02-17
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多