我试图在动态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) I\xe2\x80\x99ve 总是假设 aDictionary不保留添加项目的顺序。\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}\nRun Code Online (Sandbox Code Playgroud)\n 我正在尝试选择createDt在过去两周内的所有项目.我试过这段代码,但它不起作用.
SELECT * FROM dbo.mytable
WHERE CreateDt > dateadd(d,-15,CreateDt)
Run Code Online (Sandbox Code Playgroud)
有人能告诉我正确的方法吗?
任何人都可以告诉我为什么这不编译?错误是:
找不到源类型的查询模式的实现
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) 当它为空时,是否可以检测到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) 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) 最近我看到一位同事FirstOrDefault()在与Stack交互时使用而不是Peek().
我从未想过使用扩展方法而不是内置方法Peek(),我想知道两者之间的含义/差异是什么.
一个推荐超过另一个?用ildasm.exe查看并没有教我任何有用的东西.
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。
谢谢大家。
我需要得到当天的查询,问题是当我尝试将来自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'.仅支持初始化程序,实体成员和实体导航属性.
我有一个我正在尝试查询的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)
并得到这个错误 …
c# ×7
linq ×5
.net ×3
linq-to-sql ×3
.net-7.0 ×1
asp.net ×1
date ×1
datetime ×1
dictionary ×1
dynamic-linq ×1
nullable ×1
sql ×1
t-sql ×1