0

linqで異なるフィールドタイプを結合する

public partial class Product
{
    public int ID { get; set; }

    public string CategoryID
    {
        get { return Myclass.increse(CategoryID); }
        set { CategoryID = value; }
    }
    public string Name { get; set; }

}

public partial class ProductCategory
{
    public int ID { get; set; }
    public string Name { get; set; }
}
var query = (from c in dContext.ProductCategories
                    join p in dContext.Products
                     on Myclass.EncodeMD5(c.ID.ToString()) equals p.CategoryID
                    select new { id = p.ID, cat = p.CategoryID, name = p.Name, cat1 = c.Name }
                  ).ToList();

フィールドは文字列に変換する必要があります次に関数が EncodeMD5 を実行します

エラー:

LINQ to Entities はメソッド 'System.String EncodeMD5(System.String)' メソッドを認識せず、このメソッドはストア式に変換できません。

4

1 に答える 1

1

LINQ-to-(一部のデータベース バックエンド) で任意の .NET メソッドを呼び出すことはできません。EF (など) の要点は、式から SQL を作成したいということwhereです。単純なプロパティと演算子、および知っていて SQL にマップできるいくつかのメソッドで動作しますが、聞いたことのないこと ( increseEncodeMD5、など)を実行することはできません。

MD5 のようなものでは、MD5 ハッシュをIDと共に基になるテーブルに格納するのが最善の策です。CategoryIDの「増加」も同様です (それが何であれ)。したがって、クエリは、これらの事前に計算された値で機能することになります。

on c.IDHash equals p.CategoryIDHash
于 2013-04-15T06:40:30.057 に答える