小编Mag*_*nus的帖子

动态linq中的调用函数

我试图在动态linq select语句中调用一个函数,但我得到错误:

No property or field 'A' exists in type 'Tuple2'
Run Code Online (Sandbox Code Playgroud)

示例代码:

void Main()
{
    var a = new Tuple<int, int>(1,1);
    var b = new[]{ a };
    var q = b.AsQueryable().Select("A.Test(it.Item1)");

    q.Dump();
}

public static class A
{
    public static int Test(int i)
    {
        return i++;
    }
}
Run Code Online (Sandbox Code Playgroud)

我该如何更改代码才能使其正常工作?

如果我调用内置函数Convert.ToInt32,例如它工作正常.

var q = b.AsQueryable().Select("Convert.ToInt32(it.Item1)");
Run Code Online (Sandbox Code Playgroud)

另外我如何使用动态linq转换属性?

var q = b.AsQueryable().Select("((float)it.Item1)");
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-objects dynamic-linq

6
推荐指数
3
解决办法
3958
查看次数

字典似乎保持插入顺序

I\xe2\x80\x99ve 总是假设 aDictionary不保留添加项目的顺序。\n那么为什么这似乎总是正确的?

\n
internal class Program\n{\n    public static void Main()\n    {\n        var d = new Dictionary<int, int>();\n        var l = new List<int>();\n        var r = new Random();\n\n        for (int i = 1; i < 100_000; i++)\n        {\n            var j = r.Next();\n            if (!d.ContainsKey(j))\n            {\n                d.Add(j, 1);\n                l.Add(j);\n            }\n        }\n\n        Console.WriteLine(d.Select(kvp => kvp.Key).SequenceEqual(l));\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

c# dictionary .net-7.0

6
推荐指数
1
解决办法
186
查看次数

T-SQL中的相对日期范围

我正在尝试选择createDt在过去两周内的所有项目.我试过这段代码,但它不起作用.

SELECT * FROM dbo.mytable
WHERE CreateDt > dateadd(d,-15,CreateDt)
Run Code Online (Sandbox Code Playgroud)

有人能告诉我正确的方法吗?

sql t-sql

4
推荐指数
1
解决办法
3261
查看次数

关于DataTable的LINQ查询 - 找不到查询模式的实现

任何人都可以告诉我为什么这不编译?错误是:

找不到源类型的查询模式的实现System.Data.DataTable. Where未找到.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;

namespace caLINQ
{
    class Program
    {
        static void Main(string[] args)
        {
            string connectionString = "Data Source=STEVEN-PC\\SQLEXPRESS;Initial Catalog=linqtest;Integrated Security=True;Pooling=False";
            using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(connectionString))
            {
                 connection.Open();
                 String cmdText = "select * from customers";
                 System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(cmdText, connection);
                 System.Data.SqlClient.SqlDataReader dr;
                 dr = cmd.ExecuteReader();
                 DataSet ds = new DataSet();
                 ds.Load(dr, LoadOption.OverwriteChanges, "tab1");
                 DataTable dt = ds.Tables[0];
                 var qy = from c in …
Run Code Online (Sandbox Code Playgroud)

c# linq

4
推荐指数
1
解决办法
7172
查看次数

检测可空类型

当它为空时,是否可以检测到Nullable类型(强制转换为对象)?

既然Nullable<T>是一个结构,我认为它应该是可能的.

double? d = null;
var s = GetValue(d); //I want this to return "0" rather than ""

public string GetValue(object o)
{
    if(o is double? && !((double?)o).HasValue) //Not working with null
       return "0";
    if(o == null)
       return "";
    return o.ToString();
}  
Run Code Online (Sandbox Code Playgroud)

c# nullable

3
推荐指数
2
解决办法
498
查看次数

如何将linq中的两列连接到sql查询的select投影

1-我使用linq to sql来查询数据库表.
2-在我的实际表中,我将电话国家代码,电话号码和电话分机存储在不同的列中.
3-当我得到数据时,我需要Phone等于电话国家代码,电话号码和电话分机的串联.
4-对于某些记录,这3列中的任何一列都可能具有空值.
5-如果一列为null,则整个连接产生null.

from s in test
select new{
          Phone = s.PhoneCountryCode + s.PhoneNumber + s.PhoneExtension
}
Run Code Online (Sandbox Code Playgroud)

6-我尝试了以下,但没有奏效.仍然产生无效.

from s in test
select new{
          Phone = s.PhoneCountryCode == null ? "" : s.PhoneCountryCode + s.PhoneNumber       == null ? "" : s.PhoneNumber + s.PhoneExtension == null ? "" : s.PhoneExtension
} 
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-sql

3
推荐指数
1
解决办法
8366
查看次数

System.Collections.Stack.Peek()vs FirstOrDefault()

最近我看到一位同事FirstOrDefault()在与Stack交互时使用而不是Peek().

我从未想过使用扩展方法而不是内置方法Peek(),我想知道两者之间的含义/差异是什么.

一个推荐超过另一个?用ildasm.exe查看并没有教我任何有用的东西.

.net c#

3
推荐指数
1
解决办法
564
查看次数

Linq 左连接,其中 right 为空

linq 相对较新,来自 SQL。所以,我试图找出以下的左连接:

SELECT * from MASTER m
LEFT JOIN CHILD C
    ON m.ID=C.MASTER_ID
WHERE C.MASTER_ID is null
Run Code Online (Sandbox Code Playgroud)

所以,通常这会返回 Master 没有孩子的所有记录。我发现了 .DefualtIfEmpty() 但这并没有消除有孩子的主记录。

我从以下方面着手:

var recs=from m in MASTER
         from c in child
             .where (mapping=>mapping.MasterId == m.Id)
             .DefaultIfEmpty()
         select new { MasterId = m.Id};
Run Code Online (Sandbox Code Playgroud)

但这就是我得到的并被卡住了。我假设 .DefaultIfEmpty() 不是我要找的。注意:主表中有几百万行。孩子们的数量接近相同。我之所以提到,是因为拉回所有记录等效率不高。理想情况下,生成的 SQL 将类似于我发布的 SQL。

谢谢大家。

.net c# linq linq-to-sql

3
推荐指数
1
解决办法
6054
查看次数

Linq日期和日期时间比较器

我需要得到当天的查询,问题是当我尝试将来自DB(即a DateTime)的DateTime.Today.Date值与值进行比较时,我收到错误.

我想要实现的是获得当天的寄存器.

List<Client> _cliente = from c in db.Cliente
                        join v in db.Vendedor
                        on c.IDVendedor equals v.IDVendedor
                        where v.Fecha.Date.Equals(DateTime.Today.Date)
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:'LINQ to Entities中不支持指定的类型成员'Date'.仅支持初始化程序,实体成员和实体导航属性.

linq datetime linq-to-entities date

2
推荐指数
1
解决办法
3159
查看次数

在Linq-to-SQL中使用WHERE子句时出错

我有一个我正在尝试查询的datacontext,我想在按钮点击时绑定到gridview的结果.连接到datacontext非常有用.我得到了我期望的1000条记录.当我尝试添加WHERE子句时,我遇到了问题.这是我想要实现的按钮事件:

Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs)         
      Dim dsource = New MY_DataContext().SV_XXXs '--- This works, the data is all there        
      gridRec.DataSource = dsource.ToList().Where(Function(dtable) dtable.PN = Session("PN"))   '--- this fails
      '--- Also tried this, it also did not work ----------------------------------------------------------
      '--- gridRec.DataSource = dsource.Where(Function(dtable) dtable.PN = Session("PN"))   '--- this fails
      '----------------------------------------------------------------------------------------------------
      gridRec.DataBind()       
End Sub
Run Code Online (Sandbox Code Playgroud)

会话变量有效且dsource正确填充,但在尝试执行Where子句时出现以下错误:

评估方法System.Linq.SystemCore_EnumerableDebugView`1 [SV_REC] .get_Items()调用本机方法System.WeakReference.get_Target().不支持在此上下文中评估本机方法.

还尝试过:

Dim results =
        (
            From T In dsource
            Where T.PN = Session("SAFRReceiverPN")
            Select T
        ).ToList
Run Code Online (Sandbox Code Playgroud)

并得到这个错误 …

.net asp.net linq-to-sql

2
推荐指数
1
解决办法
424
查看次数