0

有没有办法做这样的事情:

//Create Connection.
NMBSReportViewer.Models.SchoolEntities db = new NMBSReportViewer.Models.SchoolEntities();

//Get the Data Using the Report's Stored QueryString.
String QueryString = report.Query; //"SELECT VALUE c FROM SchoolEntities.Courses AS c WHERE c.Credits > 0";
IQueryable<dynamic> data = db.CreateQuery<dynamic>(QueryString);

//Given String FieldName, String Operator, & String Value, from user, Filter the Above dataset.
data.Where(c => c.'FieldName' 'Operator' 'Value');

我假设没有像我上面那样的东西,但是有没有办法达到相同的最终结果?我将为用户提供字段和运算符的下拉列表,然后他们将在三个值的文本框中输入他们想要的值,因此 FieldName 应该始终是集合中的一个可行字段。

LINQ 中有没有办法做这样的事情?如果没有办法做到这一点......有没有办法创建一个静态类型为“SchoolEntities.Course”的IQueryable,只给出字符串?

4

2 回答 2

0

很抱歉造成混乱,我想实体框架毕竟不是一个选择。

最后,我想我将不得不使用这种方法,以便在每次数据库获得或丢失表时保持重新部署项目的自由。

static void Main(string[] args)
{
//Connection String
String ConnectionString = @"Data Source = localhost\SQLEXPRESS; Initial Catalog = School; Trusted_Connection=True;";

//Create the Connection
SqlConnection DbConn = new SqlConnection(ConnectionString);

//Open the Connection
DbConn.Open();

//Query String
String QueryString = "SELECT * FROM COURSE";

//Create the SqlCommand Object
SqlCommand QueryCommand = new SqlCommand(QueryString, DbConn);

//Use the SqlCommand to create the DataReader Object.
SqlDataReader QueryCommandReader = QueryCommand.ExecuteReader();

//Create the Datatable.
DataTable DataT = new DataTable();

//Load the Data into the Table.
DataT.Load(QueryCommandReader);

//Get the User Input
String Expression = "Credits > 3";

//Create DataRows and Filter Table.
List<DataRow> FilteredData = new List<DataRow>();
FilteredData = DataT.Select(Expression).ToList();
}

感谢您的帮助和信息。抱歉,这不是一个完全明确的问题。

于 2012-10-31T18:54:10.337 回答
0

你的意思是:

IQueryable<Course> data = db.CreateQuery<Course>(QueryString);

您还可以像这样查询 Course 实体:

IQueryable<Course> data  = db.Course.Where(c => c.Credits > 0 && c.Name == "Bob");
于 2012-10-31T18:05:53.317 回答