在数据库中有一张表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 表达式 得到我想要的 字符串
[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 表达式 得到我想要的 字符串
FROM [dbo].[Table_Temp] AS [t0] ???
select r.Row_A
{
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
};
public IQueryable<Employees> GetList(string strCity)
{
return from p in db.Employees
where p.City == strCity
select p;
}
参考
参考
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);
................................................
................................................
................................................
}