• Code
  • Tags
  • Users
  • Titles
  • Log in
  • Feedback
  • FAQ
Share Code
Welcome to ForkCan.com

ForkCan is all about sharing code in a social way.

Discuss, debate or argue with other devs about their or your own code.

Give other devs feedback or make a Fork (Make a better version of a shared code).

Rate the code, if you use the code mark it as used so others can see if the shared code is used by someone.

Help each other to be better devs and to be more productive.


Features not working yet:

Flag a post


QR Code

Tiny Url

http://4kcan.com/s/ODQ4MQ==

Related Code
Left outer join extension method

Get T-SQL for Linq to Sql expression [draft]

Generate sql query for your linq to sql query expression. Doesn't support all dbtypes.

0
321 0 0 0 0 0

Usage:

void Main()
{
    var query = dataContext.Domains.Where(d => d.Name.Contains("test")).OrderBy(d => d.Name).Skip(100).Take(100);
    Console.WriteLine(this.GenerateToExecSql(query));
    Console.WriteLine(this.GenerateToPlainSql(query));
}

Code:

public static class Extensions
{
    public static string GenerateToPlainSql(this DataContext dc, IQueryable query)
    {
    	return generateSql(dc, query, false);
    }
    public static string GenerateToExecSql(this DataContext dc, IQueryable query)
    {
    	return generateSql(dc, query, true);
    }

    private static string generateSql(this DataContext dc, IQueryable query, bool isExecSqlQuery)
    {
    	string separator = isExecSqlQuery ? "," : Environment.NewLine;
    	string declareWord = isExecSqlQuery ? string.Empty : "DECLARE ";
    	string setWord = isExecSqlQuery ? string.Empty : "SET ";
    	StringBuilder sb = new StringBuilder();
    	StringBuilder sbParams = new StringBuilder();
    	StringBuilder sbValues = new StringBuilder();
    	var command = dc.GetCommand(query);
    	foreach (var param in command.Parameters.OfType<SqlParameter>())
    	{
    		if (param.SqlDbType == SqlDbType.VarChar || param.SqlDbType == SqlDbType.NVarChar)
    		{
    			sbParams.AppendFormat("{0}{1} {2}({3}){4}", declareWord, param.ParameterName, param.SqlDbType, param.Size, separator);
    			sbValues.AppendFormat("{0}{1} = '{2}'{3}", setWord, param.ParameterName, param.SqlValue, separator);
    		}
    		else if (param.SqlDbType == SqlDbType.Date || param.SqlDbType == SqlDbType.DateTime || param.SqlDbType == SqlDbType.DateTime2)
    		{
    			sbParams.AppendFormat("{0}{1} {2}{3}", declareWord, param.ParameterName, param.SqlDbType, separator);
    			sbValues.AppendFormat("{0}{1} = '{2}'{3}", setWord, param.ParameterName, param.SqlValue, separator);
    		}
    		else
    		{
    			sbParams.AppendFormat("{0}{1} {2}{3}", declareWord, param.ParameterName, param.SqlDbType, separator);
    			sbValues.AppendFormat("{0}{1} = {2}{3}", setWord, param.ParameterName, param.SqlValue, separator);
    		}
    	}
    	if (sbParams.Length > 0)
    		sbParams.Remove(sbParams.Length-1, 1);
    	if (sbValues.Length > 0)
    		sbValues.Remove(sbValues.Length-1, 1);

    	if (isExecSqlQuery)
    	{
    		sb.Append("EXECUTE sp_executesql N'").Append(query.Provider).Append("', ");
    		sb.Append(" N'").Append(sbParams).Append("', ");
    		sb.Append(sbValues).Append("");
    	}
    	else
    	{
    		sb.Append(sbParams).Append(sbValues);
    		sb.Append(query.Provider.ToString());
    	}

    	return sb.ToString();
    }

}

Share: twitter | facebook   Action: used | fork | flag

debugging

Mark 'debugging' tag as 'like'

Mark 'debugging' tag as 'ignore'

linq

Mark 'linq' tag as 'like'

Mark 'linq' tag as 'ignore'

linq-expressions

Mark 'linq-expressions' tag as 'like'

Mark 'linq-expressions' tag as 'ignore'


 @toha73 "Code Contributor"
716
October 10, 2012 8:51 AM
edited October 10, 2012 9:02 AM

Fork

 Get T-SQL for Linq to Sql expression [draft] -  @toha73 Wednesday 10, 2012 8:51 AM


0 Feedback


You must log in before you can give any feedback


0 Discussion(s)

Newest Oldest

You must log in before you can post a comment

Squeed
Made by: Fredrik Normén 2010