Tag: linq

在此上下文中仅支持实体类型,枚举类型或基元类型

我目前正在搜索搜索页面。 我只需要返回包含存储在int [] ST中的所有主题标签id的主题的themedetails列表。 目前该行(ST == null?true:ST.Contains(b.ThemeTagID))似乎给我一个错误 附加信息:无法创建类型为“System.Int32 []”的空常量值。 在此上下文中仅支持实体类型,枚举类型或基元类型。 public ActionResult Index(int ProviderID = 0, string Description = null, int[] ST = null) { var themedetail = from t in db.ThemeDetail from b in t.ThemeTags where ( (string.IsNullOrEmpty(Description) ? true : t.Description.ToLower().Contains(Description.ToLower())) && (ProviderID == 0 ? true : t.ProviderID == ProviderID) && (ST […]

ValueTypes的动态表达式生成问题

我构建了一个框架,允许对表中的报表数据进行级联排序,具体取决于哪个列是主排序列。 它在很大程度上起作用,除了一个特定但重要的情况:当字段的属性是值类型时。 我收到以下错误消息: System.ArgumentException:类型’System.Int32’的表达式不能用于返回类型’System.Object’ 我知道这意味着我需要设置ValueType的值,但我不完全确定如何在这种特殊情况下。 根据一些研究和这个SO答案,我认为我需要以某种方式使用Expression.Convert 。 我的代码是生成表达式的代码。 generics类型参数T是数据“行”的类型。 GetFullSortOrder()只返回一个字符串数组,这些字符串表示类型T中也将进行排序的列(属性)的名称。 public IEnumerable<Expression<Func>> GetExpressions(string sortedColumn) where T : IReportRecord { var columns = GetFullSortOrder(sortedColumn) var typeParameter = Expression.Parameter(typeof(T)); foreach (var c in columns) { var propParameter = Expression.Property(typeParameter, c); yield return Expression.Lambda<Func>(propParameter, typeParameter); } } 当在T中选择的属性是ValueType时处理Expression.Lambda<Func>()时抛出exception。 属性框需要什么,或者在运行时才知道类型时返回正确的值?

Int 。包含在EF6中不起作用

我有一个奇怪的问题,基本上我有这个代码: var langauges = (from l in context.languages where Model.LanguageIDs.Contains(l.LanguageID) select l) .ToList(); 我不知道为什么,但我总是得到一个错误: System.NullReferenceException:未将对象引用设置为对象的实例 事情是它以前工作,但之后我将我的所有应用程序升级到MVC5和EF6,它开始崩溃这个代码。 虽然如果我检查Model.Langauges ,它有几个ID,所以没关系。 我也在高高的背景下循环。语言和所有人都有id。 我也是这样写的: var langauges = (from l in context.languages where 1==l.LanguageID select l) .ToList(); 这也工作,所以我真的不明白,我做错了什么? 任何人都可以详细说明……? 堆栈跟踪: at MySql.Data.Entity.SqlGenerator.Visit(DbPropertyExpression expression) at MySql.Data.Entity.SqlGenerator.Visit(DbInExpression expression) at System.Data.Entity.Core.Common.CommandTrees.DbInExpression.Accept[TResultType](DbExpressionVisitor`1 visitor) at MySql.Data.Entity.SqlGenerator.VisitBinaryExpression(DbExpression left, DbExpression right, String op) at MySql.Data.Entity.SqlGenerator.Visit(DbAndExpression expression) at […]

如何让这个LINQ全外连接正常运行?

我正在构建一个监视用户计算机上的目录的WPF应用程序。 该应用程序从受监控目录上传文件,然后将一些信息保存到SQLite数据库中。 业务处理的一部分是不重新处理已上载的文件,并重新上载已上载但自上次上载以来已更改的文件。 我有两个帮助方法,构建并返回一个List ,我使用LINQ – Full Outer Join来加入。 我的问题是,当我使用FileMetaData对象时,代码似乎不起作用。 看起来一切都应该都有效,但我不知道为什么它不起作用。 我通常会尝试在另一个post上发表评论,但我目前没有“Rep”来做这件事。 下面是我构建的示例,如果您在LINQpad中运行它, 则会显示我的问题。 在单击运行按钮之前,请确保将语言设置为“C#程序”。 我应该采取哪些不同的方式让样本与对象一起工作? 万分感谢! void Main() { var dbItems = new List() { new FileMetaData {FilePath = “C:\\Foo.txt”, DbTimestamp = “1” }, new FileMetaData {FilePath = “C:\\FooBar.txt”, DbTimestamp = “3” }, }; var fsItems = new List() { new FileMetaData {FilePath = […]

Plain ArrayList Linq c#2语法(需要转换)

这个问题对我来说纯粹是学术性的,我在这里回答了一个问题。 从具有特定元素值的arraylist中检索对象 这家伙正在使用一个简单的ArrayList ……我知道不是最好的事情……充满了人 class Person { public string Name { get; set; } public string Gender { get; set; } public Person(string name, string gender) { Name = name; Gender = gender; } } personArrayList = new ArrayList(); personArrayList.Add(new Person(“Koen”, “Male”)); personArrayList.Add(new Person(“Sheafra”, “Female”)); 现在他想选择所有女性。 我这样解决这个问题 var females = from Person P in personArrayList […]

LINQ to SQL在填充对象之前解密值

我的一个表中有一个字段使用加密 ENCRYPTBYPASSPHRASE(,) 当值被放入对象时,该字段仍然是加密的,因此我无法对其进行任何操作。 我无法创建一个视图或存储过程或任何其他解密数据库字段的项目,因为它失去了加密字段的目的。 有没有办法使框架工作运行像 DECRYPTBYPASSPHRASE(, ) 在将值赋给对象之前? 现在我正在获取数据,然后调用ExecuteQuery来解密该值。 并在我的数据模型类的加密值上分配新值。 它有效,但我只是想知道它是否可以通过我不知道的一些选项自动完成。 我试过搜索但没找到任何东西。

在简单/未命名的C#LINQ组连接中排序内部键源

我知道这个问题因使用的单词而变得奇怪。 但这是我正在学习LINQ组连接的MSDN页面上使用的术语,我将解释它们。 我正在尝试LINQ的数据是: class Product { public string Name { get; set; } public int CategoryID { get; set; } } class Category { public string Name { get; set; } public int ID { get; set; } } // Specify the first data source. static List categories = new List() { new Category(){Name=”Beverages”, ID=001}, […]

分组通过Lambda表达式使用两列以上的列

我必须在lambda表达式中转换我给定的linq查询。 即 var scholars = (from scholar in db.Scholars join suspension in db.Suspensions on scholar.ID equals suspension.ScholarID where suspension.StartDate >= startDate && suspension.EndDate x.Suspensions.Sum(y => y.SuspensionDays)) }) .ToList() .OrderBy(x=> x.FullName);

我应该如何从List 的自定义对象中提取不同值的集合?

我有一个对象列表 – 让我们说它们是订单。 订购 OrderID Date SalesmanId … 我想从此列表中提取一个Distinct的SalesmanId列表。 做这个的最好方式是什么? 我不认为它通过手动循环……是吗? 更新感谢您的回复。 我想到了一个额外的要求(在Jon Skeets回答之后概述)并将其编码为: var salesusers = from s in lstOrders group s by new { s.SalesUserId,s.Username} into g select new { UserName = g.Key.Username, UserId = g.Key.SalesUserId }; 它有效,但我不确定这是否是正确的方法,或者我是否离开了标记? 谢谢。 更新#2:这个跑步和跑步 – 像我这样的新手可能会发现这个链接问题的答案也很有用。

如何为Linq表达式添加排序规则?

如何实现IQuariable的方法如下: var trash = (from a in ContextBase.db.Users orderby a.FirstName select a).ToCollatedList(); 结果我想看到 SELECT * from [User] ORDER BY FirstName COLLATE SQL_SwedishStd_Pref_Cp1_CI_AS ASC 谢谢。