当我们在序列上调用查询运算符时,会调用特定于序列的运算符。
我的意思是如果我调用Where<>()operator on IEnumerable<>,将被调用的运算符将在 Enumerable 类中定义,如果它被调用IQueryable<>,则将调用在 Queryable 类中定义的那个。
考虑在 Enumerable 类中定义的运算符 Reverse。
如果我想调用它,Iqueryable<>那么我必须先使用AsEnumerable<>()运算符将其转换为IEnumerable<>.
db.Countries.OrderBy(cntry=>cntry.CountryName).AsEnumerable().Reverse()
Run Code Online (Sandbox Code Playgroud)
但是 Reverse 运算符必须同时拥有所有记录,以便它可以反转它们。
在上面的代码中,所有记录都是先加载到内存中,然后 Reverse() 操作符才反转它吗?
我是 Linq 服务器的新手。我的数据库中有一个存储过程,用于返回计数。
select COUNT(*) from tbl_WorkerUsers
where WorkerCode=@Wcode
Run Code Online (Sandbox Code Playgroud)
当我直接在我的数据库中运行它时,它返回 1。
exec checkWorkerCodeAvailibility 100000312
Run Code Online (Sandbox Code Playgroud)
但是当我在 c# 代码中运行它时,它总是返回 null。
WorkerDataContext Wkc = new WorkerDataContext();
int? result = Wkc.checkWorkerCodeAvailibility(Int32.Parse(Wcode)).Single().Column1;
Run Code Online (Sandbox Code Playgroud)
怎么了?
我的表中有一个列,其数据类型为“时间戳”。现在我通过 LINQ2SQL 插入一行。现在我应该在这里写什么:
Entity_Product_Point ev = new Entity_Product_Point();
ev.DateCreated = ???
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个Ienumerable<string>集合,我想用分隔符连接成一个字符串;
例如 {"One","Two","Three"} -> "One;Two;Three;"
是否可以使用以下功能?
List<string> list = new List<string>(){"One","Two","Three"};
list.Aggregate<String>((x,y) => x + String.Format("{0};",y));
Run Code Online (Sandbox Code Playgroud)
我也试过这个代码:
list.Aggregate<String>((x,y) => String.Format("{0};{1}",x,y));
Run Code Online (Sandbox Code Playgroud)
两个样品都不起作用。
编辑:我发现使用 Linq-2-sql 或 Linq-2-sql 中的聚合函数无法执行我想要的操作。
EDIT2:我使用的解决方法是检查原始 linq 查询返回的项目......并将它们复制到一个新列表,并按照下面的 linq 对象而不是 linq-2-sql 对象的答案中的建议进行连接.
我有两种不同类型的列表
class A
{
int number;
string name;
}
class B
{
int number;
}
List<A> a1;
List<B> b1;
Run Code Online (Sandbox Code Playgroud)
现在两个列表都已填充,现在我想删除列表 a1 中的项目(编号)(如果列表 b1 中不存在该项目(编号))。尝试了以下方法
a1.removeall(a=>b1.Exists(b1.number!=a1.number);
Run Code Online (Sandbox Code Playgroud)
但结果并不如预期。请帮助我......
我正在尝试使用 EF6 中的表名称读取实体属性及其类型。例如
public partial class ContextEntities : DbContext
{
public virtual DbSet<tblNote> tblNotes { get; set; }
}
public partial class tblNote
{
public int intNoteID { get; set; }
public string strLoanNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个"tblNote"以字符串形式调用的实体名称。通过使用这个表名,我想获取tblNote实体及其属性和类型。
所以我这样做了
List<Reflection.PropertyInfo> props = new List<Reflection.PropertyInfo>();
PropertyInfo entityProperty = contextEntities.GetType().GetProperties().
Where(t => t.Name == "tblNote").Single();
if ((entityProperty != null))
props.Add(entityProperty);
Run Code Online (Sandbox Code Playgroud)
这是行不通的。我只是获得contextEntities属性。怎么做?
我需要在 LINQ 中编写以下 T-SQL:
SELECT T1.ID, T2.Name
FROM T1
LEFT JOIN T2 ON (T1.ID = I2.ID1 OR T1.ID = T2.ID2)
Run Code Online (Sandbox Code Playgroud)
OR 连接在 LINQ 中如下所示:
T1.Join(T2, t1=>new{}, t2=>new{}, (t1,t2)=>new{ID=t1.Id, t2=t2}).Where(o=>o.Id == o.t2.Id1 || o.Id==o.t2.Id2);
Run Code Online (Sandbox Code Playgroud)
但该查询是 INNER JOIN,而不是 LEFT JOIN。某种 LEFT JOIN 看起来像这样:
T1.GroupJoin(T2, t1 => t1.Id, t2 => t2.Id1, (t1, t2) => new { Id = t1.Id, Name1 = t2.Select(t => t.Name) }).DefaultIfEmpty()
.GroupJoin(T2, o => o.Id, t2 => t2.Id2, (i, j) => new { Id = i.Id, Name1 = i.Name1, …Run Code Online (Sandbox Code Playgroud) 我有一个 SQL 命令,我试图将其转换为 LINQ to SQL 命令,但遇到了困难。
我的 SQL 命令如下:
SELECT purchs.iclientid, ifeatureid, AddnlOptionList FROM purchs
WHERE AddnlOptionList <> ''
GROUP BY purchs.iclientid, ifeatureid, AddnlOptionList
HAVING (SUM(noptions) > 0)
Run Code Online (Sandbox Code Playgroud)
我已经成功地做到了以下示例:
var q =
from purchs in db.Purchases
group q by purchs.noptions into g
where purchs.AddnlOptionList != ""
&& g.Sum(x => x.noptions) > 0
select q;
Run Code Online (Sandbox Code Playgroud)
但是,我似乎被困在 q 组中,出现以下两个错误:
Cannot use local variable 'q' before it is declared
Cannot convert lambda expression to type 'System.Collections.Generic.IEqualityComparer<decimal?> because it is not a delegate …Run Code Online (Sandbox Code Playgroud) 下面是我的 linq 查询:
var objList = from p in db.Table1
join q in db.Table2 on p.saleCategoryId equals q.Id
join r in db.Table3 on p.landDetailId equals r.Id
select new
{
p.Id,
r.KhataNo,
r.KhasraNo,
q.type,
p.saleCategoryId,
p.area,
p.stock
};
Run Code Online (Sandbox Code Playgroud)
从上面的查询我得到如下结果:
Id KhataNo KhasraNo Type SaleCategoryId Area Stock
1 1AB 11AB LOM 1 100 50
2 1AB 11AB LOR 2 200 100
3 1CD 11CD LOM 1 300 150
4 1CD 11CD LOR 2 250 50
Run Code Online (Sandbox Code Playgroud)
但我想按以下方式对上面的几列进行分组和总结(所需的输出):
Id KhataNo KhasraNo Area Stock
1 …Run Code Online (Sandbox Code Playgroud) 我有一个返回实体框架表的函数,但我只需要通过另一个实体列表传入的某些 ID。我不确定这样做的正确方法,我尝试了以下方法,但列表导致了问题......
public IEnumerable<Payment> PaymentsForContact(List<User> user) =>
_context.Payments.Where(p=> p.Id == user.Id;
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以遍历用户对象以仅返回 _context.Payments 中的用户 ID?
提前致谢