草庐IT

c# - 如何动态构建 Entity Framework 查询?

我是EntityFramework的新手,我有一个关于过滤数据的问题。我有两个不同的日志实体,它们是:DiskLog和NetworkLog.这些实体都来自Log实体。这是我的C#应用程序中的一些代码:publicclassLog{...}publicclassDiskLog:Log{...}publicclassNetworkLog:Log{...}publicenumLogType{NotInitialized=0,Disk,Network}publicListGetWithFilter(GuiduserKey,intnSkip,intnTake,DateTimedateFrom=D

c# - linq-to-sql "Cannot remove an entity that has not been attached"

当我尝试删除记录时出现错误Cannotremoveanentitythathasnotbeenattached.。我四处搜索,虽然有很多地方可以找到解决这个问题的方法,但建议的修复方法并没有让我更进一步:using(MyDataContextTheDC=newMyDataContext()){TheDC.MyTable.Attach(ARecord);//addedthislinebutdoesn'tfixit.TheDC.MyTable.DeleteOnSubmit(ARecord);TheDC.SubmitChanges();我更大的问题是:这个问题只影响删除查询还是影响其他类型的

c# - LINQ - 过滤子集合

我希望能够查询父实体并过滤子集合的内容。例如,我有一个OrderHeaders集合。我想使用LINQ查询此集合以返回所有OrderHeaders,但我只希望包含一些相关的OrderDetail行。我最好寻找一种解决方案,我可以在单个LINQ语句中完成所有这些操作。以下控制台应用对此进行了演示。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceLINQ{classProgram{staticvoidMain(string[]args){Listorders=GetO

c# - 将 LINQ 的 Zip 与不返回值的闭包一起使用

免责声明:这个问题是由我个人的好奇心驱动的,而不是完成某事的实际需要。所以我的例子是人为的。不过,我认为这是一个很可能会突然出现的问题。假设我们正在使用Zip迭代两个序列,调用一个void方法,如果发现一对中的一个项目与另一个不同(因此丢弃任何返回值),该方法只会抛出异常。这里的重点不是该方法抛出异常,而是它返回void。换句话说,我们正在做一个ForEach超过两个集合(顺便说一句,我知道什么是EricLippertthinksaboutForEach,并且完全同意他的观点并且从不使用它)。现在,Zip想要一个Func,所以当然传递了等同于Action的东西行不通。我的问题是:是否有

C# LINQ - 将嵌套字典转换为列表

我如何将嵌套字典展平为一些对象列表(下例中的SomeObject),这些对象应该保存这些字典的键?例如:让我们有一个如下类型的字典varnestedDictionary=newDictionary>();那我们上这个类吧publicclassSomeObject{publicintvar1;publicintvar2;publicstringsomeStringVar;}如何转换nestedDictionary到List其中var1是外部字典的键,var2是内部字典的关键,someStringVar是内部字典的字符串值?本质上,我该如何传输:nestedDict[0][0]="foo"

c# - 基于子实体的属性构建 OrderBy Lambda 表达式

我正在尝试使用lambda表达式生成一个LINQOrderBy子句,并将实体的列名称作为字符串输入(在下面的“sortOn”变量中)。下面的代码适用于生成lambda的sortOn值,如“代码”p=>p.Code但我还想对lambda可能所在的子实体进行排序p=>p.Category.Description所以在这种情况下,我只想设置sortOn="Category.Description"并生成正确的lamdba表达式。这可能吗?我们欢迎任何有关执行此操作的最佳方法的建议。此代码适用于简单的情况:varparam=Expression.Parameter(typeof(Product

c# - MVC 4 如何正确地将数据从 Controller 传递到 View

我目前有一个带有LINQ语句的Controller,我正在将数据从中传递到我的View。我正试图找到一种更有效和更好的编码方法来做到这一点。我的家庭Controller声明如下。VarMeltFurnace1=(fromitemindb.tbl_dppITHrwhereitem.ProductionHour>=StartShift&&item.ProductionHourx.Furnace1Total),ViewData["Furnace1Total"]=Melt.Furnace1;在我看来,我然后引用ViewData来显示它。使用@modeldynamic现在我在Index方法中有很

c# - lambda 中的自定义相交

我想知道这是否可以使用lambda表达式来解决:ListlistOne=service.GetListOne();ListlistTwo=service.GetListTwo();Listresult=newList();foreach(varoneinlistOne){foreach(vartwoinlistTwo){if((one.Id==two.Id)&&one.someKey!=two.someKey)result.Add(one);}} 最佳答案 当然可以!您可以使用thisoverloadLinq的Intersect采用

c# - 简单的linq问题: using linq to get an array of properties

假设我们有一个简单的类publicclassFoo{publicstringFooName;}现在我们想对其做一些简单的工作。publicvoidSomeCallerMethod(ListlistOfFoos){string[]fooNames=listOfFoo.//Whattodohere?}如果我什至知道调用什么方法,我可能就能找到其余的部分。 最佳答案 您想将您的类列表转换为字符串数组。理想的方法是Select,它对可枚举对象的每个元素进行操作,并根据您返回的类型构建一个新的可枚举对象。您需要将lambda表达式放入返回名称

c# - 为什么 Linq 扩展方法不位于 IEnumerator 而不是 IEnumerable 上?

有很多Linq算法只需要对输入进行一次传递,例如选择。然而所有的Linq扩展方法都位于IEnumerable而不是IEnumeratorvare=new[]{1,2,3,4,5}.GetEnumerator();e.Select(x=>x*x);//Doesn'twork这意味着您不能在从“已打开”流中读取的任何情况下使用Linq。这种情况在我目前正在处理的项目中经常发生-我想返回一个IEnumerator,其IDispose方法将关闭流,并让所有下游Linq代码对此进行操作。简而言之,我有一个“已经打开”的结果流,我可以将其转换为适当的一次性IEnumerator-但不幸的是,所有下