Linq使用中2个问题集锦

一、join子句其中一个表达式的类型不正确

如果提示上述错误一般是由于在使用join进行多个字段equals时出现

from a in ListA
join b in ListB on new {a.Id,a.Code} equals new {b.Id,b.Code}

注意上述

new {a.Id,a.Code} equals new {b.Id,b.Code} 

在ListA和ListB中的Id和Code属性名称必须一致,否则就会出现标题所述错误。

二、无法创建“匿名类型”类型的常量值;此上下文仅支持基元类型或枚举类型

如果出现上述错误一般是由于from的第一个为IQueryable对象造成的

from a in context.Users
join b in ListB on new {a.Id,a.Code} equals new {b.Id,b.Code}

注意上述中

from a in context.Users
join b in ListB

其中context.Users是IQueryable,ListB是IList,对于此问题可采用以下方式解决:
1.context.Users改为context.Users.ToList();
2.将context.Users和ListB顺序调整,改为

from a in ListB
join b context.Users in  on new {a.Id,a.Code} equals new {b.Id,b.Code}

三、关于Guid比较使用equals赋值问题
在使用Lambda表达式时候关于guid字段不要使用equals进行比较,比如以下写法不行,会在运行时报错

context.User.Where(u=>u.Id.Equals(id))

应该改为:

context.User.Where(u=>u.Id == id)

你可能感兴趣的:(Linq使用中2个问题集锦)