问题
I am making a simple application for insert, update, delete, select data with Entity Framework
I already made insertion, deletion and select all data.
Now I want to select with where condition with filter of two fields
For ex : I have table with
userid
username
password
email
Now need selection like where email = "" and password = ""
I know how to write query in SQL but having not clues with entity framework.
Also need to store this result in datatable and looping solution both for learning purpose.
This can help many beginners
回答1:
Using Linq To Entities with lambda expression:
var result = dBContext.Account.Where(a=> a.email == "" && a.password =="").ToList();
Using Linq To Entities the less fancy way:
var result = (from a in dBContext.Account
where a.email == "" && a.password ==""
select a).ToList();
Lambda expressions are used most of the time. Some people find lambda's less readable. I think it's more a personal taste that depends from your background.
EDIT:
dbContext should be replaced by the name you gave your dbContext/Entities when setting up your Entitiy framework EDMX or Code First Classes.
Account should be replaced by the name of your table/Entity
To loop and edit the results you can do:
foreach(var account in results)
{
//do something with the properties
account.email = "test@updated.com"
}
//store the changes again in the db
dbContext.SaveChanges();
回答2:
Use linq ex:
List<User> result = dbContext.Users.Where(o=> o.email == "" && o.password=="").ToList();
foreach(User u in result)
{
// do stuff
}
User u = new User();
u.Email = "mail@mail.com";
dbContext.Users.Add(u);
dbContext.Save(); //I think its Save()..
回答3:
Have to use Linq query like
var data= dBContext.Account.Where(a=> a.email == "" && a.password =="").ToList();
.ToList() will give your entire data that comes under your where condition or filter.
Now for that you return DataTable and easily apply a for condtion based on your DataTable values.
回答4:
DataTable tempData = (DataTable)grdRecords.DataSource;
var query = from r in tempData.AsEnumerable()
where r.Field<string>("UserName") != "TestUsername" &&
r.Field<string>("Password") != "TestPassword"
select r;
DataTable newDT = query.CopyToDataTable();
回答5:
use linq query as follows
IList<Users> Users = dbContext.Users.Where(x=> x.email == "" && x.password=="").ToList();
then if you want to convert into DataTable just call following generic method do convert it
public DataTable ToDataTable<T>(IList<T> data)// T is any generic type
{
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
for (int i = 0; i < props.Count; i++)
{
PropertyDescriptor prop = props[i];
table.Columns.Add(prop.Name, prop.PropertyType);
}
object[] values = new object[props.Count];
foreach (T item in data)
{
for (int i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
return table;
}
回答6:
You can try this
databasenameEntities db = new databasenameEntities ();
tablename exist= db.tablename.where(p=>p.email=="txtemail.text" && p.password=="txtpassword.text");
if(exist.count>0)
{
txtuserid.text=Convert.toInt32(exist.userid);
txtusername.Text=exist.username;
....
.....
db.saveChanges();
}
hope this may helpful.
来源:https://stackoverflow.com/questions/18718392/entity-framework-selection-query