Tag: linq

需要使用DateTime转换的lambda表达式OrderBy

我正在尝试创建一个lambda表达式(Linq,C#3.5),它可以对数据类型为String但实际上包含可解析的DateTime的值执行OrderBy。 例如,典型值可能是“5/12/2009”,“1/14/2008”等。 下面的OrderBy子句可以正确地进行排序(就像字符串数据一样),但实际上我想将这些值视为DateTimes,并按日期执行排序。 (sortColumn类似于“dateCreated”。) List orderedList = unorderedList.OrderBy(p => p.Details.Find(s => s.Name == sortColumn).Value).ToList(); 有没有办法转换谓词中的值来执行此操作? 任何帮助赞赏!

访问Lambda表达式中的Modified Closure

foreach(var category in categories) { a.AddRange(_db.Articles.Where(c => c.Categories.Contains(category))); } 代码运行正常,但我在lambda表达式中使用的category得到关于“访问修改后的闭包”的警告。 问题:在这种情况下是否有任何后果的警告?

成员没有受支持的SQL转换

我收到以下错误: 错误消息:成员’Company.ProductCore.Core.Domain.Account.Email’没有受支持的SQL转换。 我的方法看起来像这样: public Account GetAccountByEmail(string email) { Account account; using (WorkbookDataContext dc = _conn.GetContext()) { account = ( from a in dc.Accounts join em in dc.Emails on a.AccountId equals em.AccountId where a.Email.EmailAddress == email select a).FirstOrDefault(); } return account; } 我的帐户类有一个公开电子邮件的getter / setter: public Email Email { get { return _email; } set { […]

将方法传递给LINQ查询

在我正在进行的项目中,我们有许多静态表达式,当我们在它们上面调用Invoke方法并将lambda表达式的参数传递给它时,我们必须在本地范围内使用变量。 今天,我们声明了一个静态方法,其参数正是查询所期望的类型。 所以,我的同事和我正在搞乱,看看我们是否可以在查询的Select语句中使用此方法来执行项目,而不是在整个对象上调用它,而不将其带入本地范围。 它奏效了! 但我们不明白为什么。 想象一下像这样的代码 // old way public static class ManyExpressions { public static Expression<Func UsefulExpression { get { // TODO implement more believable lies and logic here return (sdt) => sdt.someCondition == true && false || true; } } } public class ARealController : BaseController { /* many declarations of important things […]

Linq中这个SQL语句的等价物是什么?

我需要将此SQL语句移植到LINQ: SELECT f.ID as IdFlight, Tarif * 1 as Tarif, f.Time, f.TimeOfArrival, sl.Name as FromLoc, sl.Country as FromCountry, sl.Airport as FromAirport, dl.Name as ToLoc, dl.Country as ToCountry, dl.Airport as ToAirport FROM Flights as f INNER JOIN Locations as sl ON sl.ID = f.ID_Source INNER JOIN Locations as dl ON dl.ID = f.ID_Destination INNER JOIN FlightsTarifs […]

查询即将到来的生日

我想询问我的客户,他们的生日还未到来。 我已经尝试过这个查询,当然 – 它已经失败了: Addresses.Where(adr => adr.DateOfBirth != null && adr.DateOfBirth.Value > DateTime.Now).Take(15).ToList(); 当然这不能正常工作(如果你将来出生的话),我想知道如何在没有一年的情况下查询我的Nullable ?

如何将两个XElements与linq select结合使用?

我正在尝试将两个XElements列表合并为一个: var list1 = XElement.Parse(@” “).XPathSelectElements(“Element”).ToList(); var list2 = XElement.Parse(@” “).XPathSelectElements(“Element”).ToList(); var res = from e2 in list2 join e1 in list1 on e2.Attribute(“name”).Value equals e1.Attribute(“name”).Value select new XElement(e1.Add(e2.Element(“ChildElement”))); 代码将无法编译,因为select是错误的(XElement.Add()返回void)。 如何组合两个XElements:e1和e2在select中并返回新的xelement(e2与e1中的子元素) 我想获得这种格式的列表:

似乎无法使用Linq与ASP.Net导航菜单

我有以下代码: // Iterate through the root menu items in the Items collection. foreach (MenuItem item in NavigationMenu.Items) { if (item.NavigateUrl.ToLower() == ThisPage.ToLower()) { item.Selected = true; } } 我想要的是: var item = from i in NavigationMenu.Items where i.NavigateUrl.ToLower() == ThisPage.ToLower() select i; 然后我可以设置item的Selected值,但它在NavigationMenu.Items上给出了一个错误。 错误5无法找到源类型“System.Web.UI.WebControls.MenuItemCollection”的查询模式的实现。 ‘哪里’找不到。 考虑明确指定范围变量’i’的类型。 当我注释掉where子句时,我收到此错误: 错误22无法找到源类型“System.Web.UI.WebControls.MenuItemCollection”的查询模式的实现。 找不到“选择”。 考虑明确指定范围变量’i’的类型。

使用多对多关系entity framework强制内部联接

我在我的数据库中设置了多对多关系,如下所示: User ——- Id (PK, Identity) First Last …various other fields Skill ——- Id (PK, Identity) Description UserSkill ———– UserId (PK, FK on User.Id) SkillId (PK, FK On Skill.Id) 当我在DbContext上运行此LINQ查询时: from u in Users from s in u.Skills where s.Id == 5 select new { u.Id, s.Description }) 生成的SQL包含所有内部联接,这是我想要的: SELECT [Extent1].[UserId] AS [UserId], [Extent2].[Description] AS […]

要处理的linq函数:两个字段相等或同时为null或为空

嗨,我有一个linq查询,我将一个对象与我数据库中存储的所有其他实体进行比较。 名字和姓氏是必填字段,所以我不必检查是否为空。 但在街道的情况下,我必须做这些检查。 如果两个字段都为空或空字符串或者它们是相同的,我想匹配。 以下linq查询工作正常。 但我徘徊是没有办法让它更具可读性。 例如,使用像Bool FieldsAreEqualOrBothNullOrEmpty(r.street,request.street)这样的自定义函数 无法想象如何做到这一点,如果可能的话。 var same = from r in db.Requests where r.firstName.ToLower() == request.firstName.ToLower() && r.lastName.ToLower() == request.lastName.ToLower() //Seems long to just compare two fields && ( string.IsNullOrEmpty(r.street) && string.IsNullOrEmpty(request.street) ) || r.street.ToLower() == request.street.ToLower() select r; return same;