1

longのリストを含むオブジェクトがあります。データベースでは、これをコンマで区切られた文字列として保存しています。読み取り/書き込み操作を行うときは常に、この文字列を展開または結合しており、このステップをビジネスロジックからクエリに移動しようとしています。だからこれは私が私のクエリで試したものです:

var TheData = (from l in MyDC.Table
               ....
               select new MyModel()
               {
                   TheListOfLongs = (from x in l.StringOfLongs.Split(',')
                                     select Convert.ToInt64(x)).ToList<long>(),

                    SomeObjectProp = ...

               }).ToList();

私が得ているエラーはこれです:

メソッド'System.String[] Split(Char [])'には、SQLへの変換がサポートされていません。

クエリを修正して機能させるにはどうすればよいですか?

4

2 に答える 2

3

あなたはDBで分割操作を実行しようとしています。これは、「あなたが私に頼んだことをどうやってやるのかわかりません!」と答えます。

.ToList()解決策は、編集する前に電話することですselect new Model() 。延期のためのやり直しと変更(誤って間違った場所に分割された)は今すぐに行う必要があります

var TheData = (from l in MyDC.Table select new { 
    stringLong = l.StringOfLongs,
    OtherProps = //...
})
  .AsEnumerable()
  .Select(x => new Model 
                   { 
                       TheListOfLongs = x.stringLong 
                              .Split(',')   
                              .Select(y => Convert.ToInt64(y)
                              .Cast<long>(),
                       OtherProps = // ...
                   });

これをすべてクエリ構文で行う場合は、次のようになります。

var TheData = (from l in MyDC.Table select new { 
    stringLong = l.StringOfLongs,
    OtherProps = //...
}).AsEnumerable();

var RealTheData = (from l in TheData select new Model 
    {
        TheListOfLongs = (from s in l.stringLong 
                              .Split(',') select Convert.ToInt64(s).Cast<long>(),
                       OtherProps = // ...
    });
于 2013-02-11T21:10:37.017 に答える
2
var TheData = MyDC.Table
                  .Where(...)
// optionally     .Select(l => new { l.StringOfLongs, l.SomeObjectProp })
                  .AsEnumerable() // move execution to memory
                  .Select(l => new Model() {
                      TheListOfLongs = l.StringOfLongs.Split(',')
                                        .Select(x => Int64.Parse(x))
                                        .ToList(),
                      SomeObjectProp = l.SomeObjectProp
                  }).ToList();
于 2013-02-11T21:14:23.297 に答える