2017-01-19 15 views
0

文字列配列のリストを作成しようとしています。以下はコードです。文字列配列のリストを作成するLinqクエリエラー

public List<string[]> GetRec(int hid) 
     { 
      var list = 
      (from x in table1 
       join y in table2 on x.Hid equals y.Hid  
       where x.Hid == hid 
       select new[] {x.name, x.Description, x.user}).ToList(); 
      return list; 
     } 

しかし、私は、誰もがここで間違っているものを私にお勧めできます、次のエラー

"The array type 'System.String[]' cannot be initialized in a query result. 
Consider using 'System.Collections.Generic.List`1[System.String]' instead." 

を取得しています。どんな助けもありがとう。事前

+1

シンプルで、レコードが行うときには配列を返さないでください。値を保持するクラスを作成するか、タプルを使用します。 –

+0

なぜあなたは配列を使用する必要があると思いますか? –

+0

複数の文字列を追加したい –

答えて

1

は、誰もがここで間違っているものを私にお勧めできます

答えは、エラーメッセージの最初の部分の内側にある:

配列型「可能System.String [] 'を照会結果で初期化することはできません。

単にあなたがなぜ尋ねるならば、私は知らない、そしてそれは本当に問題ではない(クエリselect句内の配列を使用することができないことを伝えるだ - 唯一の重要な部分は、それがの要件であるということです使用しているライブラリ)。

ので、間違った部分が

select new[] { x.name, x.Description, x.user } 

あり、その溶液は、エラー・メッセージの第二の部分の内側にある:

は「System.Collections.Generic.List'1 [システムの使用を検討してください.String] `代わりに。」

効果的

ではなく、配列のListを使用するためにあなたを語っています。したがって、どちらか

select new[] { x.name, x.Description, x.user }.ToList() 

または

select new List<string> { x.name, x.Description, x.user } 

SQLクエリの翻訳部分を(例外を排除する)解決します。

所望の最終結果を得るために、あなたはAsEnumerable()を使用してオブジェクトのコンテキストにLINQに切り替えて、配列に結果リストを変換する必要があります。私が作ったプログラムの

var list = 
    (from x in table1 
    join y in table2 on x.Hid equals y.Hid  
    where x.Hid == hid 
    select new [] { x.name, x.Description, x.user }.ToList()) 
    .AsEnumerable() 
    .Select(x => x.ToArray()) 
    .ToList(); 
+0

あなたは私の答えを見ることができますか?私は質問で尋ねたのと同じことをしていますし、例外もありません! – Amit

+0

@AmitMaheshwari本当に 'table1'と' table2'変数が何であるかによって異なります。あなたは 'List'を作成していますが、もちろん例外はありません。ただし、データベーステーブルとEntity Frameworkを使用する場合は、まったく同じ例外が発生します。言い換えれば、例外はクエリプロバイダの1つに特有です.LINQ to Objectsで何かが動作すると、すべてのクエリプロバイダで動作するとは思われません:) –

0

私はあなたがこれを解決するために、ここで失敗アプローチを選ぶいると思うで

おかげで、あなたは新しいアイテムのためのクラスを作成することによって、次のようなものを試すことができます。

新しいクラス定義:メソッドのシグネチャで

public class LinqResult 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string User { get; set; } 
} 

変更:

public List<LinqResult> GetRec(int hid) 
{ 
    List<int> intList = new List<int>() { 1, 2, 5, 8, 9, 6, 3, 2, 4, 5, 6, 3, 2, 4, 855, 6, 2, 4, 6, 1, 56, 3 }; 
    var list = (from x in table1 
       join y in table2 on x.Hid equals y.Hid 
       where x.Hid == hid 
       select new LinqResult 
       { 
        Name = x.name, 
        Description = x.Description, 
        User = x.user 
       }).ToList(); 
    return list; 
} 

使用例:多分

foreach (LinqResult item in GetRec(10)) 
{ 
    Console.WriteLine("Name : {0} \n Description : {1} \n User : {2}", item.Name, item.Description, item.User); 
} 
+0

ありがとうございますが、私はどのクラスも作成したくありません –

+1

@Owaisどうしてですか?これは、データの論理的なグループ化であり、文字列配列よりも内容の参照がより信頼できます。 –

+1

もう一度、配列を使用する必要があると感じる理由を尋ねます。そして、あなたが「複数の文字列を追加したいからです」という答えは、配列を使用するというあなたの決定には何ら発生しません。クラス、リストのリストなど、他の多くの構造も使用できます。だから、なぜそれが配列でなければならないと思いますか? –

0

うーん

この作品?

public List<string[]> GetRec(int hid) 
{ 
    var list = 
     (from x in table1 
      join y in table2 on x.Hid equals y.Hid  
      where x.Hid == hid 
      select new {x.Name, x.Description, x.User}) 
     .Select(a => { return new string[] { a.Name, a.Description, a.User}; }).ToList(); 
    return list; 
} 
+0

肯定的ではありませんが、すべてを 'ToList()'に持ち帰り、それをSQLクエリに変換しようとしていると思います。同じエラーをスローします。 –

0

同様の一種。 私はあなたがラッパークラスを作る必要はないと思います。 配列の代わりにリストを使用する必要はありません。

public class Records 
    { 
     public string Name; 
     public int Number; 
     public Records(string ticker, int number) 
     { 
      this.Name = ticker; 
      this.Number = number; 
     } 
    } 


static void Main(string[] args) 
{ 
      List<Records> list = new List<Records>(); 
      list.Add(new Records("amit", 1)); 
      list.Add(new Records("bharat", 1)); 
      list.Add(new Records("amit", 2)); 
      list.Add(new Records("bhart", 2)); 


      List<string[]> listStr = (from ele in list 
             where ele.Name == "amit" 
             select new[] { ele.Name, ele.Number.ToString() }).ToList(); 
} 

このコードは私に正確な私は

enter image description here

何をしたい結果を与えるだから私は間違って何かがなければならない、あなたのコードで詳細を参照する必要があると思います。 あなたができることの1つは、あなたのターゲットフレームワークまたはlinqのdllのためではないことを確認するためにあなたの環境でこのコードを試してみてください(しかし、これはそうではありません、私は3.5と4.0の両方でこれを試しました)

関連する問題