Linq to sql 历史性难题
我的Linq to sql里有个实体Category,含有属性Nullable<int> ParentId我让Category实现一个接口IHaveParent
代码如下:
public interface IHaveParent
{
Nullable<int> ParentId
{
get;
set;
}
}
public partial class Category : IHaveParent
{}
我使用如下代码:GetAll().Where(it=>it.ParentId==null)就出异常,如果把IHaveParent去掉则正常。
代码
public class TestRepository<TEntity> : RepositoryBase<TEntity>
where TEntity : class, IHaveParent
{
public void Test()
{
var items = GetAll().Where(it => it.ParentId == null);
// 这里会出现异常,base {System.SystemException} = {"不支持接口成员 IHaveParent.ParentId 的映射。"}
}
}
public class TestRepositoryFixture
{
[Fact]
public void Test()
{
TestService<Category> testService = new TestService<Category>();
testService.Test();
}
}
实在搞不定,帮帮忙啊。 --------------------编程问答-------------------- 掉下来了,顶上去。 --------------------编程问答-------------------- 3215645213241561021 --------------------编程问答--------------------
。。。 --------------------编程问答-------------------- 唉,没有人回复。 --------------------编程问答-------------------- 刚试了用
GetAll().Where(it=>it.ParentId.Value == null);
可以。。。是Nullable无法翻译过去,可是直接不用接口的都可以翻译过去。 --------------------编程问答-------------------- 12点还在写代码啊 佩服
IHaveParent继承IEnumerable试试? --------------------编程问答-------------------- LINQ这东西真正用通的人并不多,很多人还是习惯了传统的2.0方式 --------------------编程问答-------------------- 为什么要实现接口去扩展,直接扩展不行吗 --------------------编程问答-------------------- 个人意见,如果有误导请见谅:
linq to sql 可以理解为sql的中间语言,他是把我们写的linq 语句,在执行时翻译成sql语句,再执行,从而得到结果集。
也就是说,我们的linq 语句得到的都是一段sql语句,不是真正的结果,只有数据在使用的时候,才会返回真正的结果。
这里的含义貌似我也说不清楚,呵呵,不知道对你有没有参考意义 --------------------编程问答-------------------- 问题不是出在LINQ TO SQ上,LZ把GetAll()的代码贴出来看看 --------------------编程问答-------------------- 楼主检查一下属性,以及大小写。我也碰到过此类问题 --------------------编程问答-------------------- 学习了,我还没写扩展的方法。。。 --------------------编程问答-------------------- 自己造了个GetAll方法,以下代码可以正常运行
--------------------编程问答-------------------- 你这个叫linq to sql吗?
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
GetAll().Where(li => li.ParentId == null).ToList().ForEach((li) => Console.WriteLine(string.Format("Name:{0},ParentID:{1}", li.Name, li.ParentId)));
}
public interface IHaveParent
{
Nullable<int> ParentId
{
get;
set;
}
}
public partial class Category : IHaveParent
{
#region IHaveParent Members
public int? ParentId
{
get;
set;
}
#endregion
public string Name { get; set; }
}
private static List<Category> GetAll()
{
List<Category> list = new List<Category>()
{
new Category(){ Name = "1111"},
new Category(){Name = "222",ParentId = 1},
new Category(){Name = "333"}
};
return list;
}
}
}
没见到sql的东西呢 --------------------编程问答-------------------- 用接口扩展属性?为什么不试试添加 partial 属性 --------------------编程问答-------------------- 纯学习 帮顶!!!
补充:.NET技术 , LINQ