我想写一个图书查询的方法,大概如下
现在的问题是:我排序OrderBy写死的是用的book类Name属性,但是我不想写死,由
参数决定,比如说,
参数传入author就是OrderBy(t =>t.author);
参数传入keyword1就是OrderBy(t =>t.keyword1);
这个该如何实现啊。苦思不得解中,渴望得到帮助,多谢:)
-------------------------------------
public class book
{
string name;
string author;
string keyword1;
string keyword2;
string keyword3;
int ISBN;
DataTime publishTime;
}
-------------------------------------
public class dbQuery
{
public List<QueryResult> QueryBooks(string orderKey)
{
BooksDB context = new BooksDB("name=BooksDB");
List<QueryResult> results = new List<QueryResult>();
using (context)
{
results = (from result in context.QueryResults
select result).OrderBy(t =>t.name).ToList();
}
return results;
}
}
现在的问题是:我排序OrderBy写死的是用的book类Name属性,但是我不想写死,由
参数决定,比如说,
参数传入author就是OrderBy(t =>t.author);
参数传入keyword1就是OrderBy(t =>t.keyword1);
这个该如何实现啊。苦思不得解中,渴望得到帮助,多谢:)
-------------------------------------
public class book
{
string name;
string author;
string keyword1;
string keyword2;
string keyword3;
int ISBN;
DataTime publishTime;
}
-------------------------------------
public class dbQuery
{
public List<QueryResult> QueryBooks(string orderKey)
{
BooksDB context = new BooksDB("name=BooksDB");
List<QueryResult> results = new List<QueryResult>();
using (context)
{
results = (from result in context.QueryResults
select result).OrderBy(t =>t.name).ToList();
}
return results;
}
}
解决方案 »
- About ObservableCollection
- 请教高手呀,Apache & SubVersion 文件可以Update,但是不能commit!!!
- C#怎么调用、接收COM的不定长数组?
- 如何生成软件注册码
- 怎么把文本框里的字体设置成同时是粗体和斜体?
- datagrid中的数据更新问题.请看下面的button3_Click应该怎么写??(此程序运行没问题.就是更新有问题)请大家帮忙啊...
- 各位大哥,求教有关用户控件的问题
- 请教:怎么生成能在没有dotnet环境的机器上运行的exe
- Microsoft Visual C# .NET中实现XP菜单 在线等待...
- 使用C#有关图象开发的问题:我想在PictureBox中划个圆
- 如何开发系统日志
- 网站要实现读写分离(写操作在一台服务器,查询在另一台服务器)
{
using (var context = new BooksDB("name=BooksDB"))
{
switch(orderKey)
{
case "author":
return context.QueryResults.OrderBy(r => r.author).ToList();
case "xxx":
return context.QueryResults.OrderBy(r => r.xxx).ToList();
default:
return context.QueryResults.ToList();
}
}
}另外还可以用反射OrderByreturn context.QueryResults.OrderBy(r => r.GetType().GetProperty("Author").GetValue(r, null));
class Program {
static void Main(string[] args) {
users = new List<User>{
new User{Name="AAA", Age=5},
new User{Name="BBB", Age=1},
new User{Name="CCC", Age=3},
};
OrderBy<string>(t => t.Name);
Console.WriteLine("----------------------");
OrderBy<int>(t => t.Age);
Console.WriteLine("press any key to exit.");
Console.ReadLine();
} private static void OrderBy<TKey>(Func<User, TKey> selector) {
users.OrderBy(selector).Select(p=>p).ToList().ForEach(t=>Console.WriteLine(t.Name));
} private static List<User> users;
}
LINQ to Entities does not recognize the method 'System.Object GetValue(System.Object, System.Object[])' method, and this method cannot be translated into a store expression.
就要相当于调用了OrderBy(t => t.author);?比如说入参传入了string是“name”
就要相当于调用了OrderBy(t => t.name);?
这样还不如直接调,何必封装呢?哪里体现动态?
加上 if else 判断,就和我用 switch 是一样的了。真动态要么用 Dynamic.cs (Emit来做),要么动态生成 Lambda Expression
msdn: http://msdn.microsoft.com/zh-cn/library/bb882637.aspx推荐下个 Dynamic.cs 就都解决了,你可以直接写 OrderBy("xxx desc") 这样的语法。