Tag: linq to sql

Linq Distinct()按名称填充名称和值的下拉列表

我试图填写制药公司的下拉列表,如拜耳,Medley等。而且,我从DB获取这些名称,这些名称在DB中重复,但使用不同的ID。 我试图使用Linq Distinct(),但我不想使用相等比较器。 有另一种方法吗? 我的下拉列表中必须填上公司的名称和ID。 我正在尝试类似于: var x = _partnerService .SelectPartners() .Select(c => new {codPartner = c.codPartner, name = c.name}) .Distinct(); 这是在ddl显示重复的公司。 谢谢!

LINQ to SQL – 如何select特定列并返回强types列表

我试图使用LINQ to SQL来从表中select一些特定的列,并返回结果作为一个强types的对象列表。 例如: var result = (from a in DataContext.Persons where a.Age > 18 select new Person { Name = a.Name, Age = a.Age } ).ToList(); 任何帮助将不胜感激。 它build立好,但是当我运行它,我得到的错误。 不允许在查询中显式构造实体typesMyEntity 。

Orderby()不正确sorting数字c#

我正在为我的公司编写一个应用程序,目前正在进行searchfunction。 当用户search一个项目时,我想显示最高版本(存储在数据库中)。 问题是,版本被存储为一个string而不是int,当我对结果执行OrderBy(q => q.Version)时,它们将被返回 1 10 11 2 3 … 2显然是在10之前。 有没有办法让我把整个版本作为一个整数或有一个简单的IComparer在那里? 到目前为止我找不到任何实质性的东西。 我试过这样做: var items = (from r in results select r).OrderBy(q => Int32.Parse(q.Version)); 这编译但不起作用。

自动编译Linq查询

我们发现编译我们的Linq查询要比每次编译要快得多,所以我们想开始使用编译查询。 问题在于它使得代码更难阅读,因为查询的实际语法在其他文件中是closures的,远离它被使用的地方。 我想到编写一个方法(或扩展方法)可能会使用reflection来确定传入的查询,并自动caching编译后的版本以供将来使用。 var foo = (from f in db.Foo where f.ix == bar select f).Cached(); Cached()将不得不反映传入的查询对象,并确定所选的表以及查询的参数types。 显然,reflection速度有点慢,所以最好使用caching对象的名字(但是你仍然必须首次使用reflection来编译查询)。 var foo = (from f in db.Foo where f.ix == bar select f).Cached("Foo.ix"); 有没有人有这样做的经验,或知道是否有可能? 更新:对于那些没有看到它,你可以编译LINQ查询到SQL与以下代码: public static class MyCompiledQueries { public static Func<DataContext, int, IQueryable<Foo>> getFoo = CompiledQuery.Compile( (DataContext db, int ixFoo) => (from f in db.Foo […]

有没有人在unit testingSQL存储过程中取得任何成功?

我们发现我们为C#/ C ++代码编写的unit testing已经真正的得到了回报。 但是我们在存储过程中仍然有数千行业务逻辑,只有当我们的产品推广到大量用户时才真正得到testing。 更糟的是,这些存储过程中的一些最终会很长,因为在SP之间传递临时表时性能会受到影响。 这阻止了我们重构使代码更简单。 我们在围绕一些关键存储过程(主要testing性能)build立unit testing方面做了几次尝试,但是发现为这些testing设置testing数据确实很困难。 例如,我们最终复制testing数据库。 除此之外,testing最终变得非常敏感,甚至是对存储过程的最小改变。 或表格需要对testing进行大量的更改。 因此,在由于这些数据库testing间歇性失败而导致许多构build中断之后,我们不得不将它们从构build过程中提取出来。 所以,我的问题的主要部分是:有没有人成功地为他们的存储过程写unit testing? 我的问题的第二部分是linqunit testing是否会更容易? 我在想,不必设置testing数据表,你可以简单地创build一个testing对象的集合,并在“linq to objects”的情况下testing你的linq代码? (我是一个完全陌生的linq,所以不知道这是否甚至可以工作)

在LINQ to SQL中使用contains()

我试图在一个使用linq-to-sql的应用程序中实现一个非常基本的关键字search。 我的search条件是在一个string数组中,每个数组项是一个单词,我想查找包含search条件的行。 我不介意,如果他们不仅仅包含search条件(很可能,他们会),但所有的search条件必须存在。 理想情况下,我想要类似下面的代码片段,但我知道这是行不通的。 另外,我在这里看到了这个问题 ,但是这个问题的作者似乎满足于做相反的事情( query.Contains(part.partName) ),这对我不起作用。 public IQueryable<Part> SearchForParts(string[] query) { return from part in db.Parts where part.partName.Contains(query) select part; } 我怎样才能重写这个查询,以便它能做我需要的?

如何在Linq中完成一个完整的外连接?

我已经inheritance了一个没有完全devise的数据库,我需要操纵一些数据。 让我举一个比较常见的比喻来说明我所要做的事: 比方说,我们有一个Student表,一个StudentClass表,logging他所有的class级logging,还有一个StudentTeacher表,存储所有教这个学生的老师。 是的,我知道这是一个愚蠢的devise,将老师存放在class级表上会更有意义 – 但这就是我们正在处理的事情。 我现在想清理这些数据,我想find一个学生有一个老师,但没有class级,或一个class级,但没有老师的地方。 SQL因此: select * from StudentClass sc full outer join StudentTeacher st on st.StudentID = sc.StudentID where st.id is null or sc.id is null 你在Linq怎么做?

LINQ:结合连接和分组

我有一个查询,结合了一个连接和一个组,但我有一个问题。 查询如下所示: var result = from p in Products join bp in BaseProducts on p.BaseProductId equals bp.Id group p by p.SomeId into pg select new ProductPriceMinMax { SomeId = pg.FirstOrDefault().SomeId, CountryCode = pg.FirstOrDefault().CountryCode, MinPrice = pg.Min(m => m.Price), MaxPrice = pg.Max(m => m.Price), BaseProductName = bp.Name <—— can't use bp. }; 如您所见,它将Products表与BaseProducts表连接起来,并将其分组在Product表的id上。 但在生成的ProductPriceMinMax中,我还需要BaseProducts表的一个属性:bp.Name,但它不知道bp。 任何想法我做错了什么? 谢谢!

dynamicLINQ可以注入吗?

使用dynamicLINQ库( 链接 ),是否容易注入? (如果是的话)如何防范呢? 安全考虑(entity framework)的一些背景: LINQ to Entities注入攻击: 尽pipe查询组合在LINQ to Entities中是可能的,但它是通过对象模型API执行的。 与实体SQL查询不同,LINQ to Entities查询不是使用string操作或串联组成的,而且它们不易受传统SQL注入攻击的影响。 由于dynamicSQL是使用string组成的,这是否意味着它可能容易受到注入向量? 或者,LINQ to SQL会根据Dynamic LINQ库中的基础数据types自动处理参数化值? 或者它是完全安全的,因为dynamic查询将在内存中执行,而不是针对SQL(从而否定SQL索引的好处)? 我一直在通过理解DynamicLibrary.cs代码,但我相信我可以轻松地忽略一些东西。 由于这个问题是关于dynamicLINQ库本身,这个问题可以被认为适用于linq-to-sql和linq-to-entities (尽pipe上面引用了entity framework)。

我应该从我的DAL中返回IEnumerable <T>或IQueryable <T>吗?

我知道这可能是意见,但我正在寻找最佳实践。 据我所知, IQueryable<T>实现IEnumerable<T> ,所以在我的DAL中,我目前有方法签名,如下所示: IEnumerable<Product> GetProducts(); IEnumerable<Product> GetProductsByCategory(int cateogoryId); Product GetProduct(int productId); 我应该在这里使用IQueryable<T>吗? 这两种方法的优缺点是什么? 请注意,我正在计划使用存储库模式,所以我将有一个这样的类: public class ProductRepository { DBDataContext db = new DBDataContext(<!– connection string –>); public IEnumerable<Product> GetProductsNew(int daysOld) { return db.GetProducts() .Where(p => p.AddedDateTime > DateTime.Now.AddDays(-daysOld )); } } 我应该将IEnumerable<T>更改为IQueryable<T>吗? 这些或那个有什么优点/缺点?