0

こんにちは、おそらく linq が原因で、Web アプリケーションが遅いことがわかりました。

コンパイルされたクエリでちょっと迷っています。クエリをコンパイルして、クエリのクエリに使用できるようにするのを手伝ってもらえますか? (それは理解できますか?:p)たとえば、このクエリ(vb.net内):

 Dim query = (From p In db.ProductCategories _
               Group Join t In db.Translate_ProductCategories On p.ID_Category Equals t.Category_ID Into res = Group From r1 In res.DefaultIfEmpty _
               Where r1.Language_ID = langID And p.CategoryActive = True _
               Select New With {.name = r1.Name, .idcat = p.ID_Category, .level = p.CategoryLevel, .index = p.CategoryIndex, .parentID = p.CategoryParent_ID})

それから、私はまだそのようなことができることを確認したい:

Dim level0 = (From l In query Where l.level = 0 Order By l.index Ascending Select l)

助けてくれてありがとう

編集:

私はそれをやってみました:

Dim myquery = CompiledQuery.Compile( _
    Function(db As EshopDataContext) _
      (From p In db.ProductCategories _
               Group Join t In db.Translate_ProductCategories On p.ID_Category Equals t.Category_ID Into res = Group From r1 In res.DefaultIfEmpty _
               Where r1.Language_ID = langID And p.CategoryActive = True _
               Select New With {.name = r1.Name, .idcat = p.ID_Category, .level = p.CategoryLevel, .index = p.CategoryIndex, .parentID = p.CategoryParent_ID}))

Dim query = myquery.Invoke(db)

Dim level0 = (From l In query Where l.level = 0 Order By l.index Ascending Select l)

「クエリ結果を複数回列挙することはできません」というエラーが表示されます。この行で

cptCat1 = level1.Where(Function(l1) l1.parentID = parentId1).Count
4

1 に答える 1

1

最初にこれを読んでください: http://www.codinghorror.com/blog/2010/03/compiled-or-bust.html

これを読んだ後に本当に必要だと思う場合は、コンパイルされたクエリに関するMSのハウツーがあります。

http://msdn.microsoft.com/en-us/library/bb399335.aspx#Y0 (linq2sql 用)

http://msdn.microsoft.com/en-us/library/bb896297.aspx#Y300 (linq2EF 用)

于 2012-09-07T14:34:52.597 に答える