Tag: linq to entities

LINQ to Entities – where..in具有多列的子句

我正在尝试使用LINQ-to-EF查询表单的数据: class Location { string Country; string City; string Address; … } 通过元组(国家,城市,地址)查找位置。 我试过了 var keys = new[] { new {Country=…, City=…, Address=…}, … } var result = from loc in Location where keys.Contains(new { Country=loc.Country, City=loc.City, Address=loc.Address } 但LINQ不希望接受匿名类型(我理解是在LINQ中表示元组的方式)作为Contains()的参数。 是否有一种“好”的方式在LINQ中表达这一点,同时能够在数据库上运行查询? 或者,如果我只是迭代密钥和Union() – 一起编写查询,这会对性能有害吗?

Linq to Entities无法识别string.Format或concatenation’+’

我有下面的代码: using (DBContext context = new DBContext()) { myCollection = context.Items.Where(i => i.Type == 1).OrderBy(k => k.Name).Select(w => new { Alias = w.Name + string.Format(“{0}”, w.Id), Name = w.Name }).ToArray(); } 在运行时,我尝试连接字符串并尝试con转换整数w.Id为字符串时出错。 错误说: Linq to实体无法识别方法string.Format 也不支持串联符号’+’。 我通过引入AsEnumerable解决了这个问题: using (DBContext context = new DBContext()) { myCollection = context.Items.AsEnumerable().Where(i => i.Type == 1).OrderBy(k => k.Name).Select(w => new […]

怎么才能得到linq的计数

我有一个名为带列的products的表: productid , productname, productprice categoryid 我的问题是我想根据产品名称和细节获得产品数量。 我想在DataGridView显示数据。 我如何知道单个产品名称的产品数量,如下所示? productid productname productavailable productprice ————————————————————————– 1 product A 2 products(product A) 100 2 product B 5 Products(product B) 200 像上面的表格一样,我必须在DataGridView显示。 我正在使用LINQ和C#,我的DbContext名称是tsgdbcontext 。

linq到实体,where where子句在哪里? (内在哪里)

我有一个表与一对多映射到一个表,该表具有多个到另一个表的映射。 我想做以下事情: var results = context.main_link_table .Where(l => l.some_table.RandomProperty == “myValue” && l.some_table.many_to_many_table .Where(m => m.RandomProperty == “myValue”)); 我怎样才能做到这一点? 第一部分可以工作,但是在没有’内部WHERE’的情况下尝试它时,我无法访问many_to_many_table的属性,但“内在的地方”显然无法编译。 我基本上想要实现类似下面的SQL查询: SELECT * from main_link_table INNER JOIN some_table AS t1 ON t1.association = main_link_table.association INNER JOIN many_to_many_table AS t2 ON t2.association = some_table.association WHERE t1.RandomProperty = ‘MyValue’ AND t2.RandomProperty = ‘MyValue’ 它看起来很简单,但我无法找到一种方法来实现它在一行linq中 – 使用多行来实现所需的效果返回太多的结果,我最终不得不循环它们。 我也尝试过这样的东西: […]

如何使用带有linq的标量值函数实体?

可能重复: LINQ to Entity查询可以使用SQL级别函数吗? 我有一个标量函数,可以获得两点之间的距离,我想用它来查询最近的记录到点。 标量函数与linq一起使用到sql但是在EF中失败 标量函数 USE [GeoData] GO /****** Object: UserDefinedFunction [dbo].[DistanceBetween] Script Date: 09/18/2012 19:40:44 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION [dbo].[DistanceBetween](@Lat1 as real, @Long1 as real, @Lat2 as real, @Long2 as real) RETURNS real AS BEGIN DECLARE @dLat1InRad as float(53); SET @dLat1InRad = @Lat1; DECLARE @dLong1InRad […]

如何在LINQ-to-Entities查询中使用自定义属性?

我有一个类Post ,它是一个Entity Framework模型。 它包含这样的属性: public bool Showable { get { return this.Public && this.PublishedDate > DateTime.now } } 我可以在这样的查询中使用它: from p in db.Posts where p.Showable select p; 但是当我有一个使用它的属性时,就像这样 public IEnumerable ShowablePosts { get { return from p in db.Posts where p.Showable select p; } } 然后我做不到: from p in ShowablePosts where p.Id > 42 select […]

使用Dyanmic字段名称使用LINQ查询实体

我在ASP.NET MVC中创建了一个动态搜索屏幕。 我通过reflection从实体中检索了字段名称,这样我就可以允许用户选择要搜索的字段而不是显示视图中的所有字段。 当搜索结果回发到控制器时,我收到一个包含FieldName和Value的FormCollection。 我不知道搜索了多少字段,FormCollection只包含用户选择的字段。 我希望能够现在获取该字段名称,并在我查询数据库时将其应用于我的LINQ语句,例如: public List SearchPeople(Dictionary fieldValueDictionary) { List searchResults = new List(); foreach (string key in fieldValueDictionary.Keys) { searchResults.Add(entities.People.Where(p => p. == fieldValueDictionary[key])); } return searchResults; } 我在“使用键字符串作为fieldName”的地方就像p => p.FirstName == fieldValueDictionary [key]其中key =“FirstName”。 我尝试过但未能使用Lambda表树,并且在动态LINQ方面取得了一些成功。 唯一的另一种选择是做类似的事情: public List SearchPeople(Dictionary fieldValueDictionary) { IQueryable results = entities.People; foreach (string key in fieldValueDictionary.Keys) { […]

如何在没有调用的情况下合并两个C#Lambda表达式?

我想合并以下表达式: // example class class Order { List Lines } class OrderLine { } Expression<Func<Order, List>> selectOrderLines = o => o.Lines; Expression<Func<List, Boolean>> validateOrderLines = lines => lines.Count > 0; // now combine those to Expression<Func> validateOrder; 我使用selectOrderLines上的调用并将结果提供给validateOrderLines,但是因为我在Entity Framework中使用这些表达式,我必须实际创建一个干净的表达式,它应该代表: Expression<Func> validateOrder = o => o.Lines.Count > 0; 我怎样才能做到这一点?

如何在LINQ to Entities中执行SQL“Where存在”?

我真的想做这样的事情: Select * from A join B on A.key = B.key join C on B.key = C.key — propagated keys where exists (select null from B where A.key = B.key and B.Name = “Joe”) and exists (select null from C where B.key = C.key and C.Name = “Kim”) 使用Entity Framework 4和C#时,linq语句会是什么样子? 更新: 显然.Contains()将产生“Where Exists”结果。 所以,另一种尝试 […]

无法在LINQ OrderBy中使用属性名进行排序

错误是 LINQ to Entities无法识别方法’System.Object GetValue(System.Object,System.Object [])’方法,并且此方法无法转换为存储表达式。 我的代码是 public static GridResult GetAllUsers(int count, int tblsize,string sortcreteria) { using (UserEntities entity = new UserEntities()) { var data = entity.User_Details.Take(count) .OrderBy(i =>.GetType().GetProperty(sortcreteria).GetValue(i,null)) .Skip(tblsize).ToList(); result.DataSource = data; result.Count = entity.User_Details.Count(); } return result; } 如何使用属性名称作为字符串排序?