在数据库中有一张表CREATE TABLE [dbo].[Table_Temp](
[Row_A] [nvarchar](50) NOT NULL,
[Row_B] [int] NOT NULL
) 在 linq to sql  中  对应的 dbml 文件片断如下.
[Table(Name="dbo.Table_Temp")]
public partial class Table_Temp
{

private string _Row_A;

private int _Row_B;

public Table_Temp()
{
}

[Column(Storage="_Row_A", DbType="NVarChar(50) NOT NULL", CanBeNull=false)]
public string Row_A
{
get
{
return this._Row_A;
}
set
{
if ((this._Row_A != value))
{
this._Row_A = value;
}
}
}

[Column(Storage="_Row_B", DbType="Int NOT NULL")]
public int Row_B
{
get
{
return this._Row_B;
}
set
{
if ((this._Row_B != value))
{
this._Row_B = value;
}
}
}
}当在 程序中 使用 以下代码 查询数据时
            using (Dc_Cotext dbContext = new Dc_Cotext ())
            {
              List<string> temp = dbContext.Table_Temps.Select(p => p.Row_A).ToList();
            }
生成的 sql 如下:SELECT [t0].[Row_A]
FROM [dbo].[Table_Temp] AS [t0]我现在的问题是 如何 从 select 的参数  p => p.Row_A   得到  需要的字符串 即 我 输入   p => p.Row_A  时           返回的是  " [Row_A]"  这个字符串
 输入   p => p.Row_B  时           返回的是  " [Row_B]"  这个字符串
根了一下代码 发现 select 的定义如下:public static IQueryable<TResult> Select<TSource, TResult>(this IQueryable<TSource> source, Expression<Func<TSource, TResult>> selector);其参数是一个 基于 lamda 表达式的  表达式树即如何 通过输入的  lamda 表达式  得到我想要的  字符串

解决方案 »

  1.   

    学习以下,怎么查看到这个sql的:SELECT [t0].[Row_A]
    FROM [dbo].[Table_Temp] AS [t0] ???
      

  2.   

    是不是应该是这样的var temp = from r in dbContext.Table_Temps
                         select r.Row_A
      

  3.   

    class Program 
        { 
            private static List <Student> GetStudents() 
            { 
                List <Student> students = new List <Student> { 
                new Student{ Name="YOUNG", Age=25, Language="Chinese"}, 
                new Student{ Name="JESSIE", Age=21, Language="Scotland"}, 
                new Student{ Name="KELLY", Age=18, Language="English"}, 
                new Student{ Name="JUNE", Age=20, Language="English"}, 
                new Student{ Name="ADRIAN", Age=22, Language="Italy"}, 
                new Student{ Name="BRUCE", Age=17, Language="Scotland"}, 
                new Student{ Name="BRANT", Age=30, Language="Germany"}, 
                new Student{ Name="BEN", Age=25, Language="Chinese"} 
                }; 
                return students;         }         static void Main(string[] args) 
            { 
                List <Student> studentList = GetStudents();             Select(studentList); 
            }         private static void Select <T>(T studentList) 
            { 
                OnlySearch(studentList); 
                SearchCollectChangeOtherCollect(studentList); 
                BuilderAnomy(); 
                BuilderAnomyExter(); 
                SelectLambda(); 
                ComplexSelect(); 
                ComplexSelectLambda(); 
            }         private static void OnlySearch <T>(T studentList) 
            { 
                Console.WriteLine(" <hr>只查询合适对象集合的某个属性: <br>");             //lamb的写法 
                var students = RevealChangeType(studentList).Where(n=>n.Language == "Chinese").Select(n=>n.Name);             //linq的写法 
                //var students = from n in RevealChangeType(studentList) 
                //              where n.Language == "Chinese" 
                //              select n.Name;             foreach (var student in students) 
                { 
                    Console.WriteLine(string.Format(" <span class='result'>{0} </span>", student)); 
                } 
            }         private static IEnumerable <Student> RevealChangeType <T>(T obj) 
            { 
                IEnumerable <Student> student = obj as IEnumerable <Student>;             return student; 
            }         private static void SearchCollectChangeOtherCollect <T>(T obj) 
            { 
                Console.WriteLine(" <hr>从一个集合中查询,转化到另外一个集合: <br>");             //age Array 
                int[] intArray ={ 25, 1, 4, 3 };             //lamb的写法 
                var students = intArray.SelectMany(n=>RevealChangeType(obj).Where(s=>s.Age == n));             //linq的写法 
                //var students = from s in RevealChangeType(obj) 
                //              from n in intArray 
                //              where s.Age == n 
                //              select s;             foreach (var student in students) 
                { 
                    Console.WriteLine(string.Format(" <span class='result'>{0} </span>", student.Name)); 
                } 
            }         private static void BuilderAnomy() 
            { 
                Console.WriteLine(" <hr>构建匿名类型: <br>");             List <Student> studentList = GetStudents(); 
                int[] intArray = { 3, 1, 6, 4 };             //lamb的写法 
                var stu = intArray.Select(n=>new { Id = n, Name = (studentList as List <Student>)[n].Name });             //linq的写法 
                //var stu = from n in intArray 
                //          select  new{Id = n,Name=(studentList as List <Student>)[n].Name};             foreach (var s in stu) 
                { 
                    Console.WriteLine(string.Format(" <div class='result'>id:{0};name:{1} </div>", s.Id, s.Name)); 
                } 
            }         private static void BuilderAnomyExter() 
            { 
                Console.WriteLine(" <hr>构建匿名类型2——扩展已有类: <br>");             List <Student> studentList = GetStudents(); 
                int[] intArray = { 3, 1, 6, 4 };             //lamb的写法 
                var students = intArray.Select(n=>new { Id = n, studentList[n].Name, studentList[n].Age });             //linq的写法 
                //var students = from n in intArray 
                //              select new {Id = n, studentList[n].Name, studentList[n].Age};             foreach (var student in students) 
                { 
                    Console.WriteLine(string.Format(" <div class='result'>id:{0}; name:{1}; age:{2} </div>", student.Id, student.Name, student.Age)); 
                } 
            }         private static void SelectLambda() 
            { 
                Console.WriteLine(" <hr>select的Lambda表达式: <br>");             List <Student> studentList = GetStudents(); 
                int[] intArray = { 3, 1, 6, 4 };             //lamb的写法 
                var stu = intArray.Select(i=>new { Id = i, studentList[i].Name });             //linq的写法 
                //var stu = from i in intArray 
                //          select new {Id = i, studentList[i].Name};             foreach (var student in stu) 
                { 
                    Console.WriteLine(string.Format(" <div class='result'>id:{0}; name:{1} </div>", student.Id, student.Name)); 
                } 
            }         private static void ComplexSelect() 
            { 
                Console.WriteLine(" <hr>复合选择: <br>");             List <Student> studentList = GetStudents(); 
                string[] stringArray = { "Ajax", "Csharp", "Javascript", "Css Desige", "Asp.net", "Gis" };             //lamb的写法 
                //var stu = stringArray.Where(s=>s.Length > 8).SelectMany(s=>studentList.Where(str1=>str1.Age > 23).Select(str=>new { book = s, name = str.Name })); 
                var stu = studentList.Where(sl=>sl.Age > 23).SelectMany(sl=>stringArray.Where(s=>s.Length > 8).Select(s=>new { name = sl.Name, book = s }));             //linq的写法 
                //var stu = from sl in studentList 
                //          where sl.Age > 23 
                //          from s in stringArray 
                //          where s.Length > 8 
                //          select new {name = sl.Name, book = s};             foreach (var student in stu) 
                { 
                    Console.WriteLine(string.Format(" <div class='result'>{0} is studying {1} </div>", student.name, student.book)); 
                } 
            }         private static void ComplexSelectLambda() 
            { 
                Console.WriteLine(" <hr>多重选择的Lambda表达式: <br>");             List <Student> studentList = GetStudents(); 
                string[] stringArray = { "Ajax", "Csharp", "Javascript", "Css Desige", "Asp.net", "Gis" };             //lamb的写法 
                //var stu = studentList.SelectMany(s=>stringArray.Select(str => s.Name + "has a book names " + str));             //linq的写法 
                var stu = from sl in studentList                    
                          from s in stringArray                      
                          select new {name=sl.Name,language=s};             foreach (var s in stu) 
                { 
                    Console.WriteLine(string.Format(" <div class='result'>{0} </div>", s)); 
                } 
            } 
        }     sealed class Student 
        { 
            public int age; 
            public int Age 
            { 
                get { return age; } 
                set { age = value; } 
            }         private string name; 
            public string Name 
            { 
                get { return name; } 
                set { name = value; } 
            }         private string language; 
            public string Language 
            { 
                get { return language; } 
                set { language = value; } 
            } 
        } ------ select top * from table 语法补充--------skip(index).Take(count)     varResults=fromdtinctx.Customers.Skip(0).Take(10)1.Top 查询----skip(index).Take(count)
         var Results = from dt in ctx.Customers.Skip(0).Take(10)
                                 select new
                                 ...{
                                     dt.CustomerID,
                                     dt.CompanyName,
                                     dt.City
                                 };
       2.Like 查询----startwith()
                  from dt in ctx.Customers
                  where dt.ID.Startwith('A')
       3.In查询----Contain()
         string[] s = ...{ "ivan","aaa","aaaa"};
                   var Results = from dt in ctx.Customers.Skip(0).Take(10)
                                 where s.Contains(dt.CustomerID)
                                 select new
                                 ...{
                                     dt.CustomerID,
                                     dt.CompanyName,
                                     dt.City
                                 };
      

  4.   

    NorthwindDataContext db = new NorthwindDataContext();
     public IQueryable<Employees> GetList(string strCity)
      {
          return from p in db.Employees
                where p.City == strCity
                select p;
       }
    参考
    参考 
      

  5.   

    谢谢大家, 最终通过 lamda表达式结合相关的字符串处理达到目的
            public static List<T> sample<Result>(Expression<Func<T, Result>> I_Field)
            {
                Sql_QueryNode<T> R_Result = new Sql_QueryNode<T>();            string filed = I_Field.Body.ToString();
                filed = filed.Substring(filed.IndexOf('.') + 1);
    ................................................
    ................................................
    ................................................
     }