Tag: linq

如何在Linq to Sql中插入或更新where子句?

我试图将以下存储过程转换为LinqToSql调用(这是SQL的简化版本): INSERT INTO [MyTable] ([Name], [Value]) SELECT @name, @value WHERE NOT EXISTS(SELECT [Value] FROM [MyTable] WHERE [Value] = @value) DB对要检查的字段没有约束,因此在这种特定情况下,需要手动进行检查。 此外,还有许多项目不断被插入,所以我需要确保当这个特定的插入发生时,没有值字段的欺骗。 我的第一个预感是做以下事情: using (TransactionScope scope = new TransactionScope()) { if (Context.MyTables.SingleOrDefault(t => t.Value == in.Value) != null) { MyLinqModels.MyTable t = new MyLinqModels.MyTable() { Name = in.Name, Value = in.Value }; // Do some stuff […]

Linq to entities – 2个键之间的第一个字符串

我正在使用entity framework,并且遇到了缺乏对某些扩展的支持的问题。 我有2个键(都是char) fromKey和toKey ,我正在构建一个Where语句,它将搜索Stores列表,并选择Store.Name的第一个字母在fromKey和toKey之间的位置。 string[0]不起作用, Substring不起作用 – 任何人都有任何想法如何绕过这个? 子串方法的代码: public static IQueryable FindActiveByName() { var r = new ReadRepo(Local.Items.Uow.Context); Tuple range = Tuple.Create(“0”, “9”); return r.Find().Where(s => range.Item1 <= s.Name.Substring(0, 1) && s.Name.Substring(0, 1) <= range.Item2); } 给我一个错误: 运算符<=无法应用于字符串 UPDATE Anwser由nemesV提供 public static IQueryable FindActiveByName() { Tuple range = Tuple.Create(‘R’, ‘S’); var r = […]

在ICollection <Tuple >上实现.Contains()的最简单方法

假设我有一个Dictionary<String, Tuple> ,我想确定任何一个字典值是否有T1的T1。 我怎样才能最优雅地做到这一点? LINQ?

如何在Linq到EF中使用Expression <Func >的条件?

关于这个主题已经存在一些问题(例如entity framework中的Expression.Invoke? ),但是,我无法找到适合我具体情况的答案。 我想定义一个这样的方法: public IQueryable GetCustomers(Expression<Func> condition) { return from p in ctx.Customers.AsExpandable() where condition.Compile()(p) select p; } AsExpandable方法来自LinqKit(正如之前提到的线程中所建议的那样)。 但是,当我尝试像他的方式调用我的方法时: var customers = GetCustomers(c => c.ID == 1); 它抛出InvalidCastException: 无法将类型为“System.Linq.Expressions.InstanceMethodCallExpressionN”的对象强制转换为“System.Linq.Expressions.LambdaExpression”。 我究竟做错了什么?

LINQ to Objects中使用Max()后如何选择多个值?

我有以下LINQ查询: var query = (from p in obj1 group p by p.objID into g let totalSum = g.Sum(p => p.ObjPrice) select new { MyObjectID = g.Key, totalSum }) .Max(g => g.totalSum); 我想以最高价格选择对象的对象ID和价格。 我怎样才能做到这一点?

如何在entity framework中获取一些实体列?

假设我有一个包含超过1000000列的表。 当我使用LINQ To SQL和Entity-Framework所有查询都将用c#编写,如下所示: EFContext.MyTableName.Where(row=>row.column1==someValue) .Select(…) .FirstOrDefault(…) .Any(…) … 如何只获得实体的一些列? 有没有办法只获得1000000列中的第1列和第2列和第3列? 注意: 结果数据的类型应该在选择后保留,例如,如果没有过滤某些列类型的结果是Type1,那么非常重要的是,在过滤之后,结果的类型是Type1,但是被过滤的Type1的那些属性的值应该是null或default。

简化定位列表中的元素,可能使用LINQ

我有以下代码: class TestClass { public string StringValue { get; set; } public int IntValue { get; set; } } class MainClass { private readonly List MyList; public MainClass() { MyList = new List(); } public void RemoveTestClass(string strValue) { int ndx = 0; while (ndx < MyList.Count) { if (MyList[ndx].StringValue.Equals(strValue)) break; ndx++; } MyList.RemoveAt(ndx); } […]

IEnumerable ,Arity和Generic Type Definitions

我有一个class级计数器 ,用钥匙计算东西。 简化: public class Counter { private Dictionary counts; public void Increment(T key) { int current; bool exists = counts.TryGetValue(key, out current); if (exists) { counts[key]++; } else { counts[key] = 1; } } } 它还有许多其他专门针对我需求的东西,但这才是最重要的。 到目前为止,它的效果很好。 现在我想让它在Linq查询中使用(包含键和值)。 做到这一点,我认为我需要实施 IEnumerable 所以我补充说: public class Counter : IEnumerable<KeyValuePair> { // … IEnumerator<KeyValuePair> IEnumerable<KeyValuePair>.GetEnumerator() { return ((IEnumerable<KeyValuePair>)counts).GetEnumerator(); […]

C#Linq或Lambda从类中获取Dictionary <string,List >

我似乎找不到我要找的答案。 希望这里有人可以提供帮助。 我有一个包含某些进程的设置信息的类。 每个类都有一个processId,taskId和我当前逻辑不需要的各种其他信息。 public class ProcessSetting { public int ProcessId { get; set; } public int TaskId { get; set; } // Other properties not needed } 可以存在多个ProcessSettings。 我将数据拉入List。 可以将processId与多个TaskId相关联。 例如: ProcessId: 1, TaskId: 1 ProcessId: 1, TaskId: 1 ProcessId: 1, TaskId: 2 ProcessId: 1, TaskId: 3 ProcessId: 2, TaskId: 3 ProcessId: 2, TaskId: […]

使用LINQ计算两个字符串之间的匹配字符

一位朋友问我如何用LINQ改进一些代码。 你会如何通过两个字符串之间的字符比较来计算索引的匹配数? 这是原始代码,可以用LINQ进行改进吗? private int Fitness(string individual, string target) { int sum = 0; for (int i = 0; i < individual.Length; i++) if (individual[i] == target[i]) sum++; return sum; }