⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fromclause.cs

📁 基于LINQ和.NET 3.5 的数据库源码
💻 CS
字号:
using System;
using System.Collections.Specialized;
using Lephone.Data.SqlEntry;
using Lephone.Data.Definition;

namespace Lephone.Data.Builder.Clause
{
    public class FromClause : IClause
    {
        private readonly string TableNameMain;
        private readonly JoinClause[] jcs;
        private readonly HybridDictionary FromStrings = new HybridDictionary();

        public FromClause(string TableName)
        {
            TableNameMain = TableName;
        }

        public FromClause(params JoinClause[] jcs)
        {
            this.jcs = jcs;
        }

        internal FromClause(params string[] LinkColumnNames)
        {
            if (LinkColumnNames.Length < 2 || LinkColumnNames.Length % 2 != 0)
            {
                throw new ArgumentException("LinkColumnNames.Length not even or less than 2.");
            }
            jcs = new JoinClause[LinkColumnNames.Length / 2];
            for (int i = 0; i < LinkColumnNames.Length; i+=2)
            {
                jcs[i / 2] = new JoinClause(LinkColumnNames[i], LinkColumnNames[i + 1],
                    CompareOpration.Equal, JoinMode.Inner);
            }
        }

        public string GetMainTableName()
        {
            return TableNameMain;
        }

        public string ToSqlText(DataParamterCollection dpc, Dialect.DbDialect dd)
        {
            if (TableNameMain != null)
            {
                return dd.QuoteForTableName(TableNameMain);
            }

            if (FromStrings.Contains(dd))
            {
                return (string)FromStrings[dd];
            }

            StringDictionary sd = new StringDictionary();
            string ret = dd.QuoteForTableName(jcs[0].Key1);
            sd.Add(ret, "");
            for (int i = 0; i < jcs.Length; i++)
            {
                if (i != 0 && dd.NeedBracketForJoin)
                {
                    ret = string.Format("({0})", ret);
                }
                string tn = dd.QuoteForTableName(jcs[i].Key2);
                if (sd.ContainsKey(tn)) { tn = dd.QuoteForTableName(jcs[i].Key1); }
                sd.Add(tn, "");
                ret = string.Format("{0} {3} Join {1} On {2}",
                                    ret,
                                    tn,
                                    jcs[i].ToSqlText(dpc, dd),
                                    jcs[i].mode);
            }
            lock (FromStrings.SyncRoot)
            {
                FromStrings[dd] = ret;
            }
            return ret;
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -