当前位置:编程学习 > C#/ASP.NET >>

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 --------------------编程问答--------------------
引用 2 楼 qq88138294 的回复:
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方法,以下代码可以正常运行

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;
        }
      
    }
}
--------------------编程问答-------------------- 你这个叫linq to sql吗?
没见到sql的东西呢 --------------------编程问答-------------------- 用接口扩展属性?为什么不试试添加 partial 属性 --------------------编程问答-------------------- 纯学习 帮顶!!!
补充:.NET技术 ,  LINQ
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,