顯示具有 LinqToSql 標籤的文章。 顯示所有文章
顯示具有 LinqToSql 標籤的文章。 顯示所有文章
2018-04-13 10:59

擴充 LinqToSql 的 Left Join 關連 Table

Linq 在處理 Left Join 的語法有點煩人,想採用 EntityRef 的方式進行查詢,而建立 Entity 的關連表的方式很多,但 DBML 都是透過 Visual Studio 的工具去維護的,手動去修改他實在是不優啊!利用 partial class 的方式就可以避開這種問題。

在 AssociationAttribute 中的 IsForeignKey = false 就會採用 Left Join 進行關連查詢。

using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace MyConsoleApp.Database
{
    public partial class JobCommandMaterial
    {
        private Link<Material> _Material;

        [Association(Storage = "_Material", ThisKey = "MaterialCode", OtherKey = "MaterialCode")]
        public Material Material { get { return _Material.Value; } }
    }
}

參考:
AssociationAttribute 類別 (System.Data.Linq.Mapping)
EntityRef(TEntity) 結構 (System.Data.Linq)
Link(T) 結構 (System.Data.Linq)
2018-04-11 14:07

LinqToSql 替換查詢的 Table

因為封存的 Table 是基於 Base Table 複製出來的,DBML 也不可能一開始就建立這些封存的 Table,但又想用 LinqToSql 去處理資料存取,所以想到用程式去換掉 SQL 裡的 Table Name。

var query = _dc.CtrlCommandRecord.Where(x => x.CreateDate > DateTime.Today);

DbCommand command = _dc.GetCommand(query);
command.CommandText = command.CommandText.Replace("CtrlCommandRecord", "CtrlCommandRecord_2017");
command.Connection = _dc.Connection;
command.Connection.Open();

DbDataReader reader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
var list =  _dc.Translate<CtrlCommandRecord>(reader);

list.Dump();