【问题标题】:How to insert the LINQ result to a string[] array如何将 LINQ 结果插入字符串 [] 数组
【发布时间】:2013-06-10 23:23:39
【问题描述】:

我有一个如下的一维字符串[]数组

string[] header = new string[30];

    public class GetList
    {
        public string ServerID;
        public string Name;

        public GetList(string sName, string cName)
        {
            this.ServerID = sName;
            this.Name = cName;
        }
    }        

我有一个查询,它将返回服务器名称和组件名称列表,如下所示

   var query = (from a in this.hmdb.Servers
                join b in this.hmdb.Components
                on a.ServerID equals b.ServerID
                select new { a.ServerID, b.Name});

如何将查询结果插入到字符串[]头中?

编辑

当我尝试这样的事情时

  var query = (from a in this.hmdb.Servers
                     where a.ServerID.Contains(match)
                     join b in this.hmdb.Components
                     on a.ServerID equals b.ServerID
                     select new
                         {
                             ID = a.ServerID,
                             Name = b.Name
                         }).ToArray();

我得到的结果是 ServerID 和 Names 的列表

更新

这里是标记答案的解释..

正在发生的事情是它将创建一个可查询/列表的 ServerID 和 Name 然后将其转换为 Enumerable 并使用 .Select() 扩展名创建一个字符串列表并将其转换为字符串数组 select new { a.ServerID, b.Name } --> 创建一个具有 ServerID 和 Name 属性的匿名类型的列表/iqueryable..

AsEnumerable() --> 将其转换为 Enumerable 以便我们可以使用 string.Format 因为 SQL to LINQ 不支持 string.Format

Select(x => string.Format("{0} - {1}", x.ServerID, x.Name)) --> 执行 Select 以使用 ServerID 和名称创建字符串列表

ToArray() --> 只需将其转换为 String[] 在那里。

【问题讨论】:

  • 你有一个string 的数组,但你处理的是一个GetList 类。不匹配。提供将GetList 对象转换为字符串的方法,或使用GetList 对象数组。
  • 我已经删除了该类并仅使用 select new {} 进行了编辑。请检查..
  • header = query.toArray();
  • @JibranKhan 我已经试过了。它对我不起作用

标签: c# linq c#-4.0


【解决方案1】:

尝试创建一个新字符串并将其转换为您选择的字符串数组。

   var query = (from a in this.hmdb.Servers
                join b in this.hmdb.Components
                on a.ServerID equals b.ServerID
                select new {a.ServerID, b.Name}).AsEnumerable().Select(x=> string.Format("{0} - {1}",x.ServerID, x.Name)).ToArray();

   string[] header = query;

【讨论】:

  • 感谢您的更新,但我收到以下异常,因为“LINQ to Entities 无法识别方法 'System.String Format(System.String, System.Object, System.Object)' 方法,并且此方法无法转换为商店表达式” - NotSupportedException
  • 我是否必须将查询映射到 header[] 字符串?
  • @demo_user 是的,但我担心它可能会溢出,因为你的数组 header 有 30 个限制,为什么不先让它 string[] header; 然后 header = query
  • 是的,我已经做到了。但我仍然有同样的错误 :( - LINQ to Entities 仅支持无参数构造函数和初始化程序。
  • 很奇怪。它应该工作的人。如何使用匿名类型。再次查看我的编辑@demo_user
【解决方案2】:

LINQ 仅支持无参数构造函数和初始化程序 到实体。

用途:

....
on a.ServerID equals b.ServerID
select new GetList { ServerID = a.ServerID, Name = b.Name});

【讨论】:

  • 感谢@ken2k.. 但应该是这样 select new GetList (ServerID = a.ServerID, Name = b.Name)); ?我仍然在 ServerID 上有一个错误,说名称 ServerID 在当前上下文中不存在,通过我在我的类中定义
  • 请查看我在问题中的编辑。我得到了 ID 和名称的列表。我关心的是如何将此结果保存在 string[] 数组中?我必须使用 foreach 吗?
【解决方案3】:

这将返回一个对象数组GetList

 select new GetList(a.ServerID, b.Name)).ToArray();

如果要返回字符串数组,则选择要作为字符串数组返回的字段

 select new GetList(b.Name)).ToArray();

select new GetList(a.Server + b.Name)).ToArray();

【讨论】:

  • 他想要一个包含 30 个项目的固定大小数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多