Tag: linq

C#Linq找到重复的行

人 Name City Joe Houston Jerry London Alex Houston Jerry London 如何使用LINQ返回重复行 SQL SELECT name, city, count(*) FROM collection GROUP BY name,city HAVING count(*) > 1 我试了一下 var qry = from m in context.Collections group m by new { m.city, m.name } into grp select new { rp = grp.Count() > 2 };

LINQ:使用AND序列构建动态filter

我正在努力动态创建这样的查询: Dictionary parms = new Dictionary(); foreach (var kvp in parms) { var exp = ReportDefinitions.Where(x=> x.Discriminants.Any(y=> y.Key == kvp.Key && y.Value == kvp.Value) // && more conditions to add here at each cycle ); } ReportDefinitions.Discriminants是IDictionary ; 我知道如何构建简单的Expression但我无法弄清楚如何构建这个“Any”似乎真的很复杂。 Any称之为很难解决 谁知道如何处理这个?

使用LINQ处理大型SQL查询

我试图通过实体数据模型从MS SQL数据库中的表中获取大约2000万条目的每条记录。 我最初的想法是以块的forms检索数据,如下所示: public IEnumerable<IEnumerable> GetDevicesInChunks(int chunkSize) { using (var db = new AccountsEntities()) { for (int i = 0; i < db.devices.Count(); i += chunkSize) { yield return db.devices.Skip(i).Take(chunkSize); } } } 但是,看来我必须在调用Skip之前调用OrderBy ,从我使用上述方法时抛出的exception来判断 The method ‘Skip’ is only supported for sorted input in LINQ to Entities. The method ‘OrderBy’ must be called before […]

Linq无法从’System.Collections.Generic.IEnumerable ‘转换为’string ‘

我有这个代码的问题 string.Join(“,”, Encoding.Unicode.GetBytes(“10.10.10.11”).Select(x => x.ToString(“X2”))); 我收到了错误 cannot convert from ‘System.Collections.Generic.IEnumerable’ to ‘string[]’ 它如何导出到逗号分隔的txt框?

使用Entity Framework在数据库中搜索文本

我正在编写一个UI,允许某人通过他们的名字和/或姓名查找用户。 例如,如果您输入“Mike”作为名字,输入“Jo”作为姓氏,则会返回“Mike Jones”,“Mike Johnson”和“Mike Jobs”。 我在此搜索中使用以下LINQ语句: var users = (from u in context.TPM_USER where u.LASTNAME.ToLower().Contains(LastName.ToLower()) && u.FIRSTNAME.ToLower().Contains(FirstName.ToLower()) select u); (可能有或没有更好的方法来做一个不区分大小写的类似条款,但这似乎有效) 问题是如果用户输入名字或姓氏,但是将另一个字段留空。 如果我输入“Mike”作为名字并将“姓氏”字段留空,我想要返回所有Mikes而不管他们的姓氏。 除非两个字段至少填充了某些字段,否则上述查询不会返回任何结果。 我试过了: var users = (from u in context.TPM_USER where (LastName == “” || u.LASTNAME.ToLower().Contains(LastName.ToLower())) && (FirstName == “” || u.FIRSTNAME.ToLower().Contains(FirstName.ToLower())) select u); 但是,除非两个字段都填写完毕,否则我仍然没有结果。 我在调试器下validation了LastName == “”确实是真的。 更新: 我做了一些调试,这实际上是一个Oracle问题。 生成的查询是: –Replaced the field […]

如何在不使用OrderBy的情况下从Point数组中获取具有最小X的Point?

想象一下,我有 var points = new Point[] { new Point(1, 2), new Point(2, 3) }; 要获得最小XI的要点可以: var result = points.OrderBy(point => point.X).First(); 但对于大型arrays,我认为这不是更快的选择。 还有更快的选择吗?

Automapper项目使用

我目前正在后端使用automapper将对象映射到模型。 我最近决定使用以下代码来处理所有时区转换: cfg.CreateMap() .ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours)); cfg.CreateMap() .ProjectUsing(i => DbFunctions.AddHours(i, offset.Hours).Value); Object.ProjectTo().SingleOrDefault(); 然后它工作正常,对象被映射和时区转换 但是当我在业务层中使用以下代码来执行单个对象映射时: Mapper.Map(singleRecord); 它给出了一个错误:只能从LINQ to Entities调用此函数。 堆栈跟踪 : at System.Data.Entity.DbFunctions.AddHours(Nullable`1 timeValue, Nullable`1 addValue) at lambda_method(Closure , DateTime , DateTime , ResolutionContext ) at AutoMapper.ResolutionContext.Map[TSource,TDestination](TSource source, TDestination destination) at lambda_method(Closure , Inventory , InventoryModel , ResolutionContext ) Mapper.Map在特定场景中很重要,我也不想投影单个记录。 这有什么方法吗?

无法将类型’TEnum’转换为’int’

我正在尝试将枚举转换为List,如本例中所述,例如 Enum.GetValues(typeof(MyEnum)).Cast().Select(v => new SelectListItem { Text = v.ToString(), Value = ((int)v).ToString() }).ToList(); 这项工作,但我想修改它以使用通用枚举 public static List GetEnumList(TEnum value) { return Enum.GetValues(typeof(TEnum)).Cast().Select(v => new SelectListItem { Text = v.ToString(), Value = ((int)v).ToString() }).ToList(); } 但是上面的代码没有编译和给出 无法将类型’TEnum’转换为’int’ 为线 Value = ((int)v).ToString() 我如何修复上面的代码。 为什么它使用generics枚举而不是正常的枚举给出编译错误 编辑:我已经尝试了线程中的建议,但我得到了进一步的错误: 这是我的完整代码: public static IHtmlContent EnumDropDownListFor( this IHtmlHelper htmlHelper, Expression<Func> expression, TEnum enumValue, […]

用于执行“Between”的Linq表达式

在SQL中,您可以编写一个查询,该查询在类型为’nvachar’的列上执行介于两者之间,并且只返回指定的最小值和最大值之间的所有行。 例如, Table (Id:Int, Name:nvarchar): Contents: 1, Annie 2, Bill 3, Frank 4, Phil 5, Ted Select * where Name Between ‘Frank’ and ‘Ted’ Should return Frank, Phil, and Ted. 有没有办法用linq做到这一点,或者我将不得不创建一个自定义查询并执行它? 我见过的唯一例子涉及日期或整数,这使得它非常容易(可以使用比较运算符,如等)。

如何循环控件以获取特定类型的控件?

我有这样的div: 在运行时我创建了列表项( HtmlGenericControl outer_li = new HtmlGenericControl(“li”); )中的( ul ,其属性为runat =”server” )。 现在我想要做的是:循环通过div id=”columns”获取每个( ul具有属性runat =”server” )然后遍历每个(ul)以获取每个列表项以保存内容。 编辑:根据答案: foreach (Control c in columns.Controls.OfType()) { var ctrl = (HtmlGenericControl)c; if (ctrl.TagName == “ul” && ctrl.ID != “column1”) { foreach (Control li in ctrl.Controls.OfType()) { var ctrl_li = (HtmlGenericControl)li; if (ctrl_li.TagName == “li”) { string id = […]