Tag: linq

检查列表是否包含EntityFramework中其他列表中的项目

我有一个实体Person,它有一个与之关联的位置列表。 我需要查询人员表并从位置列表(标准)中获取至少有一个位置的所有人员。 以下工作但效率很低: var searchIds = new List{1,2,3,4,5}; var result = persons.Where(p => p.Locations.Any(l => searchIds.Any(id => l.Id == id))); 这适用于小型列表(例如5-10个searchIds和5-10个位置的人。问题是有些人可能有100个位置,搜索也可以同时为100个位置。当我尝试执行上述操作时EF实际上产生了一个2000+以上的SQL语句并因为嵌套太深而失败了。虽然嵌套本身已经是一个问题,即使它可以工作,但我仍然不会发生2000+ SQL语句。 注意:真正的代码还包括多个级别和父子关系,但我确实设法使用id而不是完整对象将其归结为这个相当扁平的结构 在EF中实现这一目标的最佳方法是什么?

如何确保Linq to Sql不会覆盖或违反不可空的数据库默认值?

我有一个带有这些字段的表的SQL Server数据库: 一个默认值为1的位, NOT NULL 。 具有默认值gettime() smalldatetime , NOT NULL 。 没有默认值的int , IDENTITY , NOT NULL 。 当我为此表生成Linq to SQL时,会发生以下情况: 该bit没有特殊处理。 smalldatetime没有给予特殊处理。 int标记为IsDbGenerated 。 这意味着当我使用Linq to SQL进行插入时,将发生以下情况: 该bit将作为0发送,覆盖默认值。 对? smalldatetime将作为未初始化的System.DateTime发送,在SQL Server中产生错误,因为它不符合SQL Server smalldatetime范围。 对? 不会发送IsDbGenerated int ; DB将生成一个Linq to SQL将读回的值。 要使此方案有效,我需要做哪些更改? 总结一下:我想要使用DB分配的默认值的非可空字段,但我不希望它们是IsDbGenerated如果它意味着我在使用Linq to SQL进行更新或插入时无法为它们提供值。 如果这意味着我必须手动修改Linq生成的代码到SQL,我也不希望它们是IsDbGenerated 。 编辑:答案似乎是这是当前Linq to SQL的限制。

从两个数据表中查找公共列,并将其用于LINQ中的Join条件

我有两个数据表,这些是完全动态的。 这些将在运行时生成。 现在我想通过查找公共列来加入这些表。 请查看以下代码以获取更多信息 public DataTable DataTableJoiner(DataTable dt1, DataTable dt2) { using (DataTable targetTable = dt1.Clone()) { var dt2Query = dt2.Columns.OfType().Select(dc => new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping)); var dt2FilterQuery = from dc in dt2Query.AsEnumerable() where targetTable.Columns.Contains(dc.ColumnName) == false select dc; targetTable.Columns.AddRange(dt2FilterQuery.ToArray()); var rowData=from row1 in dt1.AsEnumerable() join row2 in dt2.AsEnumerable() on row1.Field(“ID”) equals row2.Field(“ID”) select […]

LINQ to XML新手:将节点从一个节点移动到另一个节点

问候! 我有一个包含以下内容的XElement对象: 我想将Foo的2和3移动到ID为“C”的SubSection,结果是: 将Foo部分“2”和“3”移动到“C”子部分的最佳方法是什么?

如何在C#中的两个列表中获得差异?

好的,所以我在C#中有两个列表 List attributes = new List(); List songs = new List(); 一个是字符串,一个是我创建的属性对象。非常简单 class Attribute { public string size { get; set; } public string link { get; set; } public string name { get; set; } public Attribute(){} public Attribute(string s, string l, string n) { size = s; link = l; name = n; […]

LINQ to Entities的例外不支持继续获取’LINQ表达式节点类型’调用’

我正在使用C#(包括Linq)来开发Web应用程序。 我编写了一个generics方法来扩展任何实体的Get方法。 但是当我得到运行时exception时,执行代码时,“LINQ to Entities”不支持LINQ表达式节点类型“Invoke”。 以下是代码: using System.Linq; using System.Linq.Expressions; using LinqKit; public static class ServiceExtension { public static IEnumerable GetActive(this ICrudService crudService, Expression<Func> where) where T : class, IDeletable { return crudService.Get(where.And(w => !w.IsDeleted)); } } 有人可以告诉我我做错了什么吗?

如何将数组分成一组n个元素?

在c#4中将数组分组为n个元素数组的列表的最佳方法是什么? 例如 string[] testArray = { “s1”, “s2”, “s3”, “s4”, “s5”, “s6”, “s7”, “s8” }; 如果我们采取n = 3,应该分成。 string[] A1 = {“s1”, “s2”, “s3”}; string[] A2 = {“s4”, “s5”, “s6”}; string[] A3 = {“s7”, “s8”}; 使用LINQ可能是一种简单的方法吗?

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

我正在尝试使用lambda表达式生成LINQ OrderBy子句,其中实体的列名称作为字符串的输入(在下面的“sortOn”变量中)。 下面的代码适用于sortOn值,如生成lambda的“Code” p => p.Code 但我还想对lambda可能存在的子实体进行排序 p => p.Category.Description 所以在这个例子中,我只想设置sortOn =“Category.Description”并生成正确的lamdba表达式。 这可能吗? 有关最佳方法的任何建议都会受到欢迎。 此代码适用于简单的情况: var param = Expression.Parameter(typeof (Product), “p”); var sortExpression = Expression.Lambda<Func>( Expression.Property(param, sortOn), param); if (sortAscending ?? true) { products = products.OrderBy(sortExpression); } else { products = products.OrderByDescending(sortExpression); } 此问题的用例是显示数据网格并能够对数据进行排序,只需将要排序的列名称传递回服务器即可。 我想使解决方案通用,但现在已开始使用特定类型(示例中的产品)。

是否可以在不使用OrderBy的情况下将IEnumerable转换为IOrderedEnumerable?

假设有一种扩展方法可以根据SortMethod枚举指定的几种排序类型(即按各种属性排序)来订购IQueryable。 public static IOrderedEnumerable OrderByX(this IQueryable values, SortMethod? sortMethod) { IOrderedEnumerable queryRes = null; switch (sortMethod) { case SortMethod.Method1: queryRes = values.OrderBy(a => a.Property1); break; case SortMethod.Method2: queryRes = values.OrderBy(a => a.Property2); break; case null: queryRes = values.OrderBy(a => a.DefaultProperty); break; default: queryRes = values.OrderBy(a => a.DefaultProperty); break; } return queryRes; } 在sortMethod为null的情况下(即指定我不关心值的顺序),是否有一种方法来代替通过某个默认属性进行排序,而只是将IEnumerator值传递给“订购“无需执行实际排序? 我希望能够调用此扩展,然后可能执行一些额外的ThenBy排序。

MVC – 将多个数据表传递给视图

我目前在我的MVC项目的HomeController中有以下代码: public class HomeController : Controller { public ActionResult Index() { MyDataContext dc = new MyDataContext(); IQueryable j = from n in dc.Table1 select n; return View(j); } 所以这没关系,但现在我想将第二个表传递到同一个视图。 所以我在想我应该能够做到这样的事情: public class HomeController : Controller { public ActionResult Index() { MyDataContext dc = new MyDataContext(); IQueryable j = from n in dc.Table1 select n; IQueryable […]