如果您对c#–在Linq到实体中组合谓词感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于c#–在Linq到实体中组合谓词的详细内容,并且为您提供关于.net–Linq到Sql
如果您对c# – 在Linq到实体中组合谓词感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于c# – 在Linq到实体中组合谓词的详细内容,并且为您提供关于.net – Linq到Sql很多加入表、.net – 数据绑定到LINQ到实体时的重复行、asp.net – 如何删除linq到sql?、asp.net-mvc – EntityFunctions.CreateDateTime问题与linq到实体的闰年的有价值信息。
本文目录一览:- c# – 在Linq到实体中组合谓词
- .net – Linq到Sql很多加入表
- .net – 数据绑定到LINQ到实体时的重复行
- asp.net – 如何删除linq到sql?
- asp.net-mvc – EntityFunctions.CreateDateTime问题与linq到实体的闰年
c# – 在Linq到实体中组合谓词
protected Expression<Func<event_info,bool>> _wherePredicate = c => true; public void main() { _wherePredicate = _wherePredicate.And(c => c.createdby == 6); _wherePredicate = _wherePredicate.And(c => c.isdeleted == 0); var query = from ev in dataConnection.event_info where ev.isdeleted == 0 select ev; Results = query.Where(_wherePredicate).ToList(); }
除非这不起作用,因为linq-to-entities不支持Invoke方法.
我可以在linq-to-entities中组合谓词的好方法是什么?
解决方法
结果= query.AsExpandable.Where(_wherePredicate).ToList();
然后它就神奇地起作用了!
我按照本教程:
http://www.albahari.com/nutshell/predicatebuilder.aspx
.net – Linq到Sql很多加入表
我对Linq-> sql处理连接的方式感到有些困惑.
我的模式的一个简单的例子是:
图书:
ID
标题
类别:
ID
名称
books_categories:
book_id
CATEGORY_ID
只需将这些表拖动到.dbml文件就好像不行.我在Book类book_categories上获得一个属性,我期望的是一个可以迭代并直接获取Category类的属性.
现在我必须做一些非常错误的事情
foreach (books_categories bc in book.books_categories) { category_names.Add(bc.Category.category.Trim()); }
[回应接受答复]
我勉强接受“写你自己的胶水代码”的答案.在继续研究Linq-> sql之后,我发现显然缓慢地放弃了(更为强大的IMO)实体框架. EF仍然允许一个人使用LINQ查询,并做出一个体面的工作,找出像Ruby的ActiveRecord之类的关系.
解决方法
public partial class Books { public IEnumerable<string> CategoryNames { get { return this.Books_Categories .Select( bc => bc.Category.category.Trim() ); } } public void AddCategory( Category category ) { this.Books_Categories.Add( new Book_Category { Category = category,Book = this } ); } public void RemoveCategory( Category category ) { var bc = this.Book_Categories .Where( c => c.Category == category ) .SingleOrDefault(); this.Books_Categories.Remove( bc ); } }
显然,你需要添加一些错误/边界检查等,但是你会得到这个想法.
我会给你这不是理想的,但至少你有灵活性来确定它是如何工作的.
.net – 数据绑定到LINQ到实体时的重复行
public IEnumerable<DirectoryPersonEntry> FindPersons(string searchTerm) { DirectoryEntities dents = new DirectoryEntities(); return from dp in dents.DirectoryPersonEntrySet where dp.LastName.StartsWith(searchTerm) || dp.Extension.StartsWith(searchTerm) orderby dp.LastName,dp.Extension select dp; }
ADDED:这是替代的纯ADO.NET代码,其工作原理是:
DataTable ret = new DataTable(); using (sqlConnection sqn = new sqlConnection(ConfigurationManager.ConnectionStrings["WaveAdo"].ConnectionString)) { sqlDataAdapter adap = new sqlDataAdapter("select * from DirectoryPersonList where LastName like '" + searchTerm + "%' order by LastName ",sqn); sqn.open(); adap.Fill(ret); } return ret;
更多:
>通过LINQ工作发送到sql Server的查询.
>迭代LINQ查询结果返回结果之前,返回相同的重复.
>迭代LINQ结果调用方法,绑定之前,导致相同的重复.
更新:
基于marc Gravel以下非常合乎逻辑和适当的建议,我发现EF设计师对我的实体类实体关键字做了一个非常未受过教育的猜测,它是其列表中仅有的第一个领域所有其他记录共有七个条目.
这确实是重复的原因.如果只有我可以更改或删除实体密钥,但是这个具有Etch-a-Sketch的所有业务逻辑的EF设计师都非常钦佩重复它的延迟选择,同时嘲笑我锁定外面乞求改变密钥.
解决方法
例如,给出数据:
id | name | ... -------+------------+------ 1 | Fred | ... 2 | Barney | ... 1 | Wilma | ... 1 | Betty | ...
那么如果它认为id是从LINQ迭代对象时的主键,它被迫给你“Fred”,“Barney”,“Fred”,“Fred”.从本质上讲,当它再次看到id 1时,它甚至没有看到其他列 – 它只是从标识缓存中读取ID为1的实例,并为您提供与之前相同的Fred实例.如果不认为id是主键,它会将每一行视为一个单独的对象(如果在其中一个字段中具有与另一个记录相同的值,那么这不是完全不寻常的).
我建议检查您标记为主键(在您的DBML / EDM模型中)的任何字段在每行中是否唯一.在上述情况下,id列显然不表示唯一标识符,因此不适合作为主键.在LINQ-to-sql / EF设计器中,只需取消标记.
更新:特别是在设计器中查看各种属性的“实体密钥”属性 – 特别是在查询视图时.检查“实体密钥”是否只适用于合适的列(即使行唯一的列).如果设置不正确,请将其设置为false.这也是黄色键图标可见 – 这应该只出现在真正是记录的唯一标识符的东西上.
asp.net – 如何删除linq到sql?
所以我一直在看这个教程
http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx
所以对于更新他们有
northwindDataContext db = new northwindDataContext(); Product product = db.Products.Single(p => p.ProductName == "Toy 1"); product.UnitPrice == 99; product.UnitsInStock = 5; db.SubmitChanges();
删除他们有
northwindDataContext db = new northwindDataContext(); var toyProducts = from p in db.Producsts where p.ProductName.Contains("Toy") select p; db.Products.RemoveAll(toyProducts); db.SubmitChanges();
所以我每次都要查询,以获取记录,以便删除该记录?像我可以看到这样做与更新,因为你需要给它一个记录先更新,然后进行更改,所以我了解查询部分,但不是删除.
喜欢你不能发送你想要删除的东西,它会删除它吗?你为什么要先得到它,然后告诉它被删除?
数据库上没有2个命中?
还有我正在努力工作的外交关系.所以我有这个
public ViewResult(string param1,string param2) { Table A = new Table A A.Field1 = param1; A.Field2 = param2; Delete(A); } private void Delete(Table A) { DbContext.A.DeleteallOnsubmit(A.TableB); DbContext.A.DeleteallOnSubmit(A.TableC); DbContext.A.DeleteOnSubmit(A); }
所以这个失败就出现了这样的消息:“无法删除未附加的实体”.
所以我可以看到为什么前两行在delete方法中失败,因为我创建了一个新对象,而且它们在对象中没有任何有关TableB和TableC的信息.
然而,我看不出为什么最后一行仍然失败,即使不在那里的另外两条线.
就像我以为它会工作的一样,它将需要我的Table A类对象,我传入并查看表中包含的信息.这似乎并非如此.
那么我首先要把信息拿出来,然后做一个查询来得到它,然后删除它,就像在例子中一样?
removeAll()和DeleteallOnSubmit()之间的区别也是如此.
就像我说的,我是linq到sql的新手,由于时间限制,还没有能够坐下来读一本书.一旦我有更多的时间,我将会阅读一本书.
谢谢
解决方法
它将删除主键,但是如果你有这样的话,那么只需像下面的那样添加,然后调用delete.我不会传递DLINQ所需的对象,因为我想要更改它,如果我想要的,所以我传递一个不同的用户对象,只是从业务类拉扯PK并将其放入DAO类.
var db = new MeatRequestDataContext(); if (input.UserID > 0) { entity = new User() { UserID = input.UserID }; db.Users.Attach(entity); db.Users.DeleteOnSubmit(entity); }
asp.net-mvc – EntityFunctions.CreateDateTime问题与linq到实体的闰年
我的代码在我的asp.net mvc(C#)应用程序中如下:
from u in _entities.tt_Users let _start_date = u.Start_Date let _startDate = _start_date.Day let _startmonth = _start_date.Month let _startyear = _start_date.Year let _starthour = u.Start_Time.Value.Hours let _startminutes = u.Start_Time.Value.Minutes let _startseconds = u.Start_Time.Value.Seconds let _startDateWithTime = EntityFunctions.CreateDateTime(_startyear,_startmonth,_startDate,_starthour,_startminutes,_startseconds) let _startDateWithZeroTime = EntityFunctions.CreateDateTime(_startyear,0) let _start_datetime = u.Is_Include_Time ? _startDateWithZeroTime : _startDateWithTime let _end_date = u.End_Date let _endDate = _end_date.Day let _endmonth = _end_date.Month let _endyear = _end_date.Year let _endhour = u.End_Time.Value.Hours let _endminutes = u.End_Time.Value.Minutes let _endseconds = u.End_Time.Value.Seconds let _endDateWithTime = EntityFunctions.CreateDateTime(_endyear,_endmonth,_endDate,_endhour,_endminutes,_endseconds) let _endDateWithZeroTime = EntityFunctions.CreateDateTime(_endyear,0) let _end_datetime = u.Is_Include_Time ? _endDateWithZeroTime : _endDateWithTime let _cur_Start_date = u.Is_Include_Time ? _userStartDate : _gMTStartDate let _cur_End_date = u.Is_Include_Time ? _userEndDate : _gMTEndDate where u.User_Id == 1 && !u.Is_Deleted && _start_datetime >= _cur_Start_date && _end_datetime <= _cur_End_date select new { u.User_id,u.User_Name,u.Login_Name,u.Email_Address };
这里_userStartDate,_userEndDate,_gMTStartDate和_gMTEndDate是我函数的参数.
如果列“Is_Include_Time”为true,那么我还必须从表中包含TimeSpan.但是对于闰年它抛出的错误.
有什么建议?
解决方法
DateTime startDate = new DateTime(1,1,1); var counters = from counter in entities.Counter let date = sqlFunctions.DateAdd("day",counter.DayOfMonth-1,sqlFunctions.DateAdd("month",counter.Month-1,sqlFunctions.DateAdd("year",counter.Year-1,startDate))) where date >= dateFrom && date <= dateto orderby date select new { Value = counter.CounterValue,Date = date };
我不确定性能影响,但确实有效.
最好的祝福,托尔 – 奇
我们今天的关于c# – 在Linq到实体中组合谓词的分享已经告一段落,感谢您的关注,如果您想了解更多关于.net – Linq到Sql很多加入表、.net – 数据绑定到LINQ到实体时的重复行、asp.net – 如何删除linq到sql?、asp.net-mvc – EntityFunctions.CreateDateTime问题与linq到实体的闰年的相关信息,请在本站查询。
本文标签: